2016-08-02 71 views
0

考慮下面的SQL模式:一對多關係總是空

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(); 

它返回正確的產品的結果,但對於每一個產品不返回任何人,在日誌文件中我不能看到任何查詢查看人員。 應用程序服務器是websphere和jpa實現是openjpa1.2.3

任何想法? 在此先感謝 致以問候

+0

所以,如果你調用'product.getPersons()大小()'對返回的產品之一 - 你不沒有得到任何結果?可能只是懶加載。 –

+0

你是否將'懶惰加載'配置爲'true'類似的東西? –

+0

如果你是懶惰加載,你將需要訪問結果列表中的每條記錄,並通過使用諸如Product.getPersons()。size()' – jr593

回答

0

由於您已確認問題與Lazy loading,我已經評論,我想補充它作爲答案。所以這對未來將要來這個職位的人有所幫助。

您必須使用FetchType.EAGER配置lazy loadingonetomanyfalse,如下所示。 。

@OneToMany(fetch=FetchType.EAGER) 

如果你默認情況下不指定此延遲加載將true