2012-02-12 13 views
7

Recuerdo que hay una anotación en JPA o Hibernate para indicar a hibernate que use el método getId/setId en lugar de la propiedad (anotamos nuestras propiedades). Sin esta configuración getId resulta en ir a la base de datos y completar todos los campos de ese objeto que no es lo que quiero. ¿Alguien sabe qué es esa anotación?hibernate getId está cargando el objeto aunque es flojo

Ejemplo:

public void Project { 
    @Id 
    //Other annotation forcing hibernate to use property get/settter 
    public Long id; 
} 

public Ticket { 
    @ManyToOne(lazy=true) 
    public Project project; 
} 

así, ticket.getProject.getId() resulta en golpear la base de datos para obtener el proyecto cuando el ID ya está en el objeto proxy proyecto de hibernación. La anotación arreglará lo que recuerdo.

gracias, Dean

Respuesta

12

tiene que decirle a Hibernate para acceder a la ID mediante acceso a la propiedad en lugar de acceso de campo:

@Id 
@Access(AccessType.PROPERTY) 
private Long id; 

realidad, no debería hacer que sus campos pública.

+0

Enlace aquí con más detalles; http://256.com/gray/docs/misc/hibernate_lazy_field_access_annotations.shtml –

+0

lo siento, he estado usando el playframework y te acostumbras un poco después de un tiempo. No me gustan los campos públicos, pero después de usar scala, me gustaría que Java tuviera algo así para reducir la codificación. –

+0

disparar, esto genera una advertencia para cada clase, ya que la especificación de JPA dice que la anotación debe seguir el método getId, pero moverla allí solo genera una excepción y no funcionará en absoluto. ¿Cómo hago esto correctamente estos días? (Solía ​​usar esto en el campo, pero podría haber sido el específico de hibernación) ... gracias. –

Cuestiones relacionadas