我正在使用wicket和hibernate。我得到了兩個對象category
和group
。 A group
可以有幾個categorys
和category
可以有幾個groups
。Wicket/Hibernate:從db中獲取重複列表中的記錄
我的問題(其漂亮對我來說很難解釋英文): 看來,在我的名單我從數據庫中獲取是相等的對象,因爲我存儲到組的categorys的大小(同時在數據庫只有一個組)。
實施例:
的categorys 1,2,3,4
組測試
測試得到的類別1和2因此,在我面板的組測試顯示兩次。如果我添加第3類,則組測試將顯示三次。
我這是怎麼得到我的數據庫的數據:
public List<T> getAll(Class theClass) {
List<T> entity = null;
Transaction trns = null;
Session session = sessionFactory.openSession();
try {
trns = session.beginTransaction();
entity = session.createCriteria(theClass).list();
session.getTransaction().commit();
} catch (RuntimeException e) {
e.printStackTrace();
}finally {
session.flush();
session.close();
}
return entity;
}
我的面板內我得到這樣我的組列表:
List<Group> groupList = new ArrayList<Group>();
groupList = groupDao.getAll(Group.class);
如果我調試通過我的面板和堅持在groupList
的此頁面中,SAME對象等於存儲到組中的分類的大小。數據庫內部仍然只有一行。
集團法人:
@Entity
@Table(name = "GROUP_USER")
public class Group implements Serializable{
@Id
@GeneratedValue
@Column(name = "GROUP_ID")
private int groupID;
@ManyToMany(cascade = {CascadeType.MERGE}, fetch = FetchType.EAGER)
@JoinTable(name="GROUP_TO_CATEGORY",
joinColumns={@JoinColumn(name="GROUP_ID")},
inverseJoinColumns={@JoinColumn(name="CATEGORY_ID")})
private Set<Category> categorys = new HashSet<Category>();
//constructor.. getter and setter..
}
分類實體:
@Entity
@Table(name = "CATEGORY")
public class Category implements Serializable{
@Id
@GeneratedValue
@Column(name = "CATEGORY_ID")
private int categoryId;
@ManyToMany(mappedBy="categorys", fetch = FetchType.EAGER)
private Set<Group> groups = new HashSet<Group>();
//constructor.. getter and setter..
}
從來就閱讀,在視圖中打開會話一個不好的做法? – monti 2014-10-20 12:13:11
意見不盡相同。但這是處理延遲加載的一種選擇。 – 2014-10-20 12:29:20