EclipseLink: no traiga algunos campos por defecto
-
30-09-2019 - |
Pregunta
Vamos a decir que tenemos una entidad
@Entity
public class Person {
@Id int id;
@Basic String name;
@Basic String remark;
}
campo digamos la "observación" Vamos está lleno de textos grandes, pero rara vez se utiliza. Por lo tanto, sería bueno que cuando se ejecuta JPQL: SELECT p FROM Person p
, EclipseLink simplemente ejecuta SQL select id, name from person
Y que cuando se llama a person.getRemark()
, será más inverosímil con select remark from person where id = ?
.
¿Es posible con EclipseLink 2.1?
Solución
Trate de añadir anotaciones @Basic(fetch = FetchType.LAZY)
@Entity
public class Person {
@Id int id;
@Basic String name;
@Basic(fetch = FetchType.LAZY) String remark;
}
Otros consejos
Si lo necesitas puedes definir un atributo fetch
en una anotación Basic
y ponerlo a LAZY
. Pero permítanme citar lo que la especificación dice al respecto:
11.1.6 básico anotación
(...)
La estrategia
EAGER
es un requisito en el tiempo de ejecución proveedor de persistencia que los datos deben ser recuperada tempranamente. La estrategiaLAZY
es una pista ??em> para el tiempo de ejecución proveedor de persistencia que datos debe ser traída perezosamente cuando se se accede primero. La implementación se permite a buscar ansiosamente datos para el que la indirecta estrategia tieneLAZY
sido especificado. En particular, perezoso ir a buscar solamente puede estar disponible en asignacionesBasic
para el cual Se utiliza el acceso basado en la propiedad.
En el caso particular de EclipseLink, el comportamiento dependerá de la contexto (Java EE vs Java SE) como se explica en Lo que usted puede necesitar saber acerca EclipseLink APP Lazy Loading .
En un entorno Java EE (suponiendo que el contenedor implementa los contratos de contenedores apropiados de la especificación EJB 3.0 ):
EclipseLink JPA realiza la carga diferida cuando el atributo ha podido recuperar se establece en javax.persistence.FetchType.LAZY.
En un entorno Java SE:
Por defecto, EclipseLink ignora la APP ir a buscar atributos y por defecto se aplica javax.persistence.FetchType.EAGER.
Para configurar EclipseLink APP para realizar la carga diferida cuando el conjunto de atributos a FetchType.LAZY buscar, considere uno de los siguientes:
Hemos resuelto este problema (cuando se utiliza ActiveRecord e Hibernate) poniendo la cadena grande (por lo general un CLOB o BLOB) en su propia mesa con una FK a la tabla principal (persona en este caso.) A continuación, funciona como desea .