我目前正在处理具有多个多对一关系的表,并且我正在尝试使用 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
...
从上面的示例中,我希望我的产品表最终只有两个条目(Razer 和 Yahoo),其中 Razer 与 Users 表中的 3 个条目关联,而 Yahoo 与 Users 表中的 1 个条目关联。
我还希望我的组表最终只有一个条目(“admin”),该条目与用户表上的四个条目相关联。
到目前为止,每当我收到新的数据行时,如何确保没有为“产品”和“组”表创建重复条目,而是引用现有条目 em>在那里?
例如,如果第 5 行的数据是:Razer Jacky admin,我如何确保用户表添加新条目“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 admin
这是一个两步过程 首先检查您的数据库中是否存在产品Razer和组admin。如果是则加载它们,如果没有则为它们创建新对象。
下一步相当简单,您只需通过添加在第一步中加载或创建的引用来保留用户数据。
希望这有帮助。
关于java - 在 hibernate 中的多个多对一关系的循环中保存唯一数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41560753/