繁体   English   中英

将唯一数据循环保存在休眠状态下的多个多对一关系中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM