2012-11-05 22 views
0

我有一個問題,我想用下面的例子來解釋:JPA多對一:獲取元素

JPA類人:

@ManyToMany(mappedBy = "persons") 
    private List<Car> cars= new ArrayList<>(); 

    public void setCars(List<Car> cars) { 
     this.cars= cars; 
    } 

    public List<Car> getCars() { 
     return cars; 
    } 

和那裏的問題表現出來了:

Servlet類:

Person person = genericDao.findOne(1); 
request.setAttribute("person", person.getName()); 

List<Car> cars= new ArrayList<Car>();  
cars= person.getCars(); 
request.setAttribute("cars", cars); 

的問題是,試圖讓車的時候。它們不會自動從數據庫中檢索並保存在Person類的數組中。我如何設置JPA類與多對多關係,從中我可以輕鬆地檢索具有關係的對象。

Car.java

進口冷落!

@Entity 
@Table(name = "DSD_Cars") 
public class Car extends ModifiableEntity { 

    private String name; 
    private String description; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    @ManyToMany 
    @JoinTable(
      name="DSD_Persons_Cars", 
      joinColumns = {@JoinColumn(name="IDCar", referencedColumnName = "ID")}, 
      inverseJoinColumns = {@JoinColumn(name = "IDPerson", referencedColumnName = "ID")} 
    ) 
    private List<Person> persons= new ArrayList<>(); 

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

    public List<Persons> getPersons() { 
     return persons; 
    }} 
+0

你可以顯示'Car'實體嗎? –

+0

當然,我已經編輯了我的原始消息:) –

+0

究竟是什麼問題? 'person.getCars()'返回空列表?你確定你在數據庫中確實有與該人有關的汽車嗎? – axtavt

回答

0

的問題已經得到解決:

汽車類有一個@Table(name = 「DSD_Cars」)註解。但是,@Table使用了錯誤的導入規則。將@Table類型更改爲JPA版本後,一切正常。如果@Table定義不正確,似乎JPA使用類名稱。這解釋了錯誤。

感謝大家花時間幫助我!