tutorial play framework playframework ebean

playframework - tutorial - play framework postgresql



Avaje-EBean-Consulta de objeto parcial desactiva la carga diferida (2)

He resuelto este problema mediante el uso de la interfaz estándar JDBC utilizando Statements y ResultSets en las consultas que solicito no tener carga lenta.

Como nota al margen, resulta que en el caso de Scala, el acceso directo al campo no utiliza la Carga lenta, pero desafortunadamente no es el idioma que estoy usando para mi aplicación.

Estoy desarrollando una aplicación usando Play! Framework 2.1.3, usando EBean para la capa del modelo Quiero ser capaz de ejecutar una consulta parcial de objetos y no tener las propiedades no seleccionadas cargadas a petición cuando serializo a JSON como preparación para enviar el resultado al usuario.

He intentado configurar AutoFetch en falso, también he intentado finalizar la transacción antes de serializarlo en JSON (terminé obteniendo un error de transacción inactiva). También agregué la anotación @Lazy(false) en mi clase de modelo.

En la misma nota, también tengo una asociación de uno a muchos, y quiero consultar las primeras 3 filas, utilicé new FetchConfig().queryFirst(2) pero creo que debido al mismo problema de carga lenta, terminan obteniendo las filas de asociaciones relacionadas.

Al mirar el manual, leo esto ( EBean Partial Objects ):

Un Objeto Parcial cargará perezosamente el resto de los datos a pedido cuando obtenga o establezca una propiedad que no tiene.

¿Hay alguna forma de evitar esto, nada de lo que intenté parecía funcionar!


Tienes 2 alternativas.

Opción 1) Utilice el soporte JSON integrado de Ebean que usa el núcleo Jackson bajo el capó. Hay varias opciones de escritura disponibles en JSONContext de Ebean.

Un ejemplo que usa PathProperties que se aplica tanto a la consulta como a JSON.

PathProperties pathProperties = PathProperties.parse("(id,status,name,shippingAddress(id,line1,city),billingAddress(*),contacts(*))"); List<Customer> customers = Ebean.find(Customer.class) .apply(pathProperties) .findList(); String jsonString = Ebean.json().toJson(customers, pathProperties);

La opción 2) es una función nueva disponible en la versión 6.2.2 en la que puede establecer el uso de LazyLoading (true) en la consulta.

Referencia: https://github.com/ebean-orm/avaje-ebeanorm/issues/360