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?

¿Fue útil?

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 estrategia LAZY es una pista 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 tiene LAZY   sido especificado. En particular, perezoso   ir a buscar solamente puede estar disponible en   asignaciones Basic 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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top