2016-08-02 31 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