gpt4 book ai didi

java - 保存多个多对一关系时的 Hibernate 优化

转载 作者:行者123 更新时间:2023-11-29 11:04:49 24 4
gpt4 key购买 nike

我目前正在处理具有多个多对一关系的表,并且我正在尝试使用 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 中是更好的方法吗?或者将依赖实体直接存储到数据库的做法在 hibernate 中是 Not Acceptable ?

非常感谢您的帮助!

最佳答案

如果我理解正确的话,您所问的问题是,当涉及到 Hibernate 中的父/子关系时,相关对象应该以什么顺序保存?

您拥有的是一个 Group 对象,该对象具有双向关系中的 User 对象集合,以及一个与 User 对象集合也双向相关的 Product 对象。下面记录了如何管理这些类型的关系:

http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#example-parentchild

Hibernate 建议根据子对象的状态来管理关系的状态,这意味着从子对象到父对象的链接。

第一种和第二种方法可能有效,但它们可能会导致发出不同数量的 sql 语句来插入各个对象。这完全取决于您如何映射关系。

关于java - 保存多个多对一关系时的 Hibernate 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41578507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com