我目前正在处理具有多个多对一关系的表,我正在尝试使用Hibernate实现所有这些。
例如,我有三张桌子:
产品(id,pname),用户(id,pid,gid,uname),组(id,gname)
群组与用户的一对多关系
产品与用户的关系也是一对多的
用户与产品和组具有多对一关系。
我将收到的数据样本如下:
Line 0: pname uname gname
Line 1: Razer Billy admin
Line 2: Razer Sally admin
Line 3: Razer Benji admin
Line 4: Yahoo Molly admin
...
我对数据的正确缺陷循环如下:
// Three lists of same size created,
// each list is a column of the sample data from above
// ...
for(int i = 0; i < plist.size; i++){
Product ptemp = new Product(plist.get(i));
Group gtemp = new Group(glist.get(i));
Users utemp = new Users(ptemp, gtemp, ulist.get(i));
Set<Users> users = new HashSet<Users>();
users.add(utemp);
ptemp.setUsers(users);
gtemp.setUsers(users);
session.save(ptemp);
session.save(gtemp);
}
玩hibernate时,我也注意到当我将for循环更改为
时for(int i = 0; i < plist.size; i++){
Product ptemp = new Product(plist.get(i));
Group gtemp = new Group(glist.get(i));
Users utemp = new Users(ptemp, gtemp, ulist.get(i));
session.save(ptemp);
session.save(gtemp);
session.save(utemp);
}
数据库上的结果与以前相同。
第二种方式是更好的休眠方式吗?或者是将依赖实体直接存储到数据库中的做法在hibernate中是不可接受的?
非常感谢你的帮助!
答案 0 :(得分:1)
如果我理解正确的问题是什么,在Hibernate中父/子关系时,相关对象应该以什么顺序存在?
您拥有的是一个Group对象,该对象具有双向关系中的User对象集合,以及与双向User对象集合相关的Product对象。如何管理这些类型的关系记录如下:
http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#example-parentchild
Hibernate建议管理关系状态,这意味着子对象与父对象之间的链接与子对象的状态。
第一种和第二种方法可能有效,但它们可能会导致发出不同数量的sql语句以插入单个对象。这一切都取决于你如何映射关系。