我目前正在使用具有多对多关系的表格,并试图使用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的三个项目上相关的只有两个条目(雷蛇和雅虎)结束了Users表和Yahoo与Users表中的一个条目关联。
我还希望我的组表最后只有一个与“用户”表上的四个条目关联的条目(“admin”)。
到目前为止,每当我收到一个新的数据线,我该如何确保没有重复的条目为产品创建组表,而是引用到现有在那里?
例如,如果第5行的数据是:Razer Jacky管理员,我如何确保Users表添加新条目“Jacky”,而此条目与条目“Razer”和“admin”相关联已经创建而不是在Product和Group表中创建重复条目?对于数据
我正确的有缺陷的循环是这样的:
// 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);
}
谢谢!
感谢您的回答。只是为了澄清,坚持下去,你的意思是添加休眠注释(级联坚持)产品和组?通过相同的逻辑,我可以使用hibernate注释来检查数据库中的存在吗? – 000000000000000000000
由于您不确定天气产品或组是否已经存在于您的数据库中。您必须通过查找它们来明确加载它们。它不能用'cascade'完成。如果在这种情况下使用Cascade,最终会在'product'和'group'中出现重复条目 – Ubercool