2016-08-02 10 views
0

das folgende SQL-Modell Gegeben:One Viele Beziehungen ist immer null

Two Views 
    VIEW PRODUCT 
     ID_PROPOSAL 
     ID_PRODUCT 

    VIEW PERSON 
     ID_ENTITY 
     ID_PRODUCT 
     NAME 

JPA 
@NamedQueries({ 
     @NamedQuery(name = "Product.getByProposalId", 
       query = "SELECT ie " 
         + "FROM Product ie " 
         + "WHERE ie.idProposal = :proposalId ") 
}) 
@Entity 
Table(name = "PRODUCT") 
public classe Product{ 

    @Id 
    @Column(name = "ID_PRODUCT") 
    private Long idProduct; 

    @Column(name = "ID_PROPOSAL") 
    private Long idProposal; 

    @OneToMany(mappedBy="product") 
    List<Person> persons; 

     public List<Person> getPersons() { 
     return persons; 
     } 

     public void setPersons(List<Person> persons) { 
     this.persons= persons; 
     } 

} 

@Entity 
Table(name = "PERSON") 
public classe Person{ 

    @Id 
    @Column(name = "ID_ENTITY") 
    private Long idEntity; 

    @Column(name = "ID_PRODUCT") 
    private Long idProduct; 

    @ManyToOne 
    @JoinColumn(name = "ID_PRODUCT", insertable = false, updatable = false) 
    Product product; 

     public List<Person> getPersons() { 
     return persons; 
     } 

     public void setPersons(List<Person> persons) { 
     this.persons= persons; 
     } 

} 


Query query = emanager.createNamedQuery("Product.getByProposalId"); 
     query.setParameter("propostaId", proposalId); 
     return query.getResultList(); 

Es gibt die richtigen Ergebnisse Produkt, sondern für jedes Produkt hat alle Personen, die nicht zurückkehren, in der Log-Datei kann ich nicht jede Abfrage zu sehen die Sichtperson. Der Anwendungsserver ist websphere und die jpa-Implementierung ist openjpa1.2.3

Irgendwelche Ideen? Vielen Dank im Voraus Mit freundlichen Grüßen

+0

Also, wenn Sie 'product.getPersons() aufrufen Größe()' auf einer der zurückgegebenen Produkte - Sie don‘ t irgendwelche Ergebnisse bekommen? Könnte nur faul laden sein. –

+0

Haben Sie 'Lazy loading' als' 'wahr '' so konfiguriert? –

+0

Wenn Sie lazy-loading sind, müssen Sie jeden Datensatz in der Ergebnisliste aufrufen und die Person mit "Product.getPersons(). Size()" initialisieren. – jr593

Antwort

0

Da Sie das Problem bestätigt haben ist mit Lazy loading, die ich bereits kommentiert, möchte ich es als Antwort hinzufügen. Damit dies für Menschen, die in Zukunft zu diesem Posten kommen, hilfreich sein wird.

Sie müssen lazy loading in onetomany als false mit FetchType.EAGER wie unten gezeigt konfigurieren. .

@OneToMany(fetch=FetchType.EAGER) 

Und wenn Sie nicht diese standardmäßig verzögertes Laden spezifiziert wird true