2016-08-02 2 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(); 

возвращает правильные результаты продукта, но и для каждого продукта не возвращайте Лица, в лог-файле я не видел ни одного запроса к View Person. Сервер приложений - websphere, а реализация jpa - openjpa1.2.3

Любые идеи? Заранее благодарен С уважением

+0

Итак, если вы звоните 'product.getPersons() размер()' на одном из возвращенных продуктов - вы не» t получить какие-либо результаты? Может быть, просто ленивая загрузка. –

+0

Вы настроили 'Lazy loading' как' true' что-то вроде этого? –

+0

Если вы lazy-load, вам нужно будет посетить каждую запись в списке результатов и инициализировать 'person', используя что-то вроде' Product.getPersons(). Size() ' – jr593

ответ

0

Поскольку вы подтвердили, что проблема связана с Lazy loading, о которой я уже прокомментировал, я бы хотел добавить ее в качестве ответа. Так что это будет полезно для людей, которые приходят на этот пост в будущем.

Вы должны установить lazy loading в onetomany как false, используя FetchType.EAGER, как показано ниже. .

@OneToMany(fetch=FetchType.EAGER) 

И если вы не указываете это по умолчанию ленивая загрузка будет true