我正在使用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