2011-02-26 29 views
8

tengo una relación bidireccional, uno para muchos y muchos para uno. por ejemplo, una empresa tiene muchas personas, y unas personas que tiene una empresa, por lo que, en la compañía,JPA OneToMany, siempre vacío

@OneToMany(mappedBy = "company", fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
private Collection<Person> persons; 

y en persona,

@ManyToOne 
@JoinColumn(name="COMPANY_ID") 
private Company company; 

ahora, decir que tengo un método @PrePersist/@PreUpdate en la empresa, donde cuando se actualiza, quiero establecer la misma marca de tiempo en todas las personas ... como,

@PrePersist 
@PreUpdate 
public void setLastModified() { 
    this.lastModified = System.currentTimeMillis(); 
    if (persons != null) { 
     for (Person person : persons) { 
      person.setLastModified(this.lastModified); 
     } 
    } 
} 

cuando depurar este, veo que el campo de las personas en la empresa siempre está vacío. cuando miro el tipo de la colección de personas, es un java.util.Vector. no estoy seguro de si eso es relevante. esperaba ver algún tipo de colección de JPA de carga automática.

¿Qué estoy haciendo mal?

Respuesta

0

Agregar fetch = FetchType.Eager a @ManyToOne anotación. Lo agregaste del otro lado de la relación.

+0

gracias. Todavía no tengo la oportunidad de verificar esto, pero actualizaré esta pregunta cuando lo haga. –

+3

esto no resuelve el problema. –

0

si desea obtener personList en Company, use FetchType.EAGER. En APP,

@--ToOne => Default : FetchType.EAGER 
@--ToMany => Default : FetchType.LAZY 

@JoinColumn(name="COMPANY_ID", fetch = FetchType.EAGER) 
private Company company; 
2

Debe establecer ambos lados de su relación. Cuando crea una nueva Persona y establece su Compañía, también debe agregarla a las personas de la Compañía (¿empleados?).

Además, no debe cambiar otro objeto en el prePersist/Update de un objeto, debe usar su propio evento prePersist/Update.

Sede, http://en.wikibooks.org/wiki/Java_Persistence/Relationships#Object_corruption.2C_one_side_of_the_relationship_is_not_updated_after_updating_the_other_side

+0

Iba a agregar mi propio truco con una versión rudimentaria de lo que este enlace especifica, pero no tenía idea de que en realidad era un enfoque sugerido por expertos. – blagae

Cuestiones relacionadas