[英]Saving unique data in a loop for multiple many-to-one relationships in hibernate
我目前正在处理具有多个多对一关系的表,并且尝试使用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
...
从上面的示例中,我希望我的Product表以仅两个条目(Razer和Yahoo)结尾,Razer与Users表上的三个条目关联,而Yahoo与Users表上的一个条目关联。
我还希望我的“组”表最后只包含一个与“用户”表上的四个条目相关联的条目(“ admin”)。
到目前为止,每当我收到一行新数据时,如何确保没有为“产品和组”表创建重复的条目 ,而是引用那里的现有 条目 ?
例如,如果第5行的数据是: Razer Jacky admin ,如何确保Users表添加了新条目“ Jacky”,而该条目与已创建的条目“ Razer”和“ admin”相关联,而不是创建重复项产品和组表中的条目?
我正确的数据缺陷循环如下所示:
// Three lists of same size created,
// each list is a column of the sample data from above
// ...
Set<Users> users = new HashSet<Users>();
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));
users.add(utemp);
ptemp.setUsers(users);
gtemp.setUsers(users);
session.save(ptemp);
session.save(gtemp);
}
谢谢!
让我们来看一下您提供的示例。 您要插入新行-Razer Jacky管理员
这是一个两步过程,首先检查数据库中是否存在产品Razer和组admin 。 如果是,则加载它们;如果不是,则为其创建新对象。
下一步非常简单,您只需通过添加在第一步中加载或创建的引用来保留用户数据。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.