java - 在 Hibernate 中插入/更新一个实体与另一个引用的实体

标签 java hibernate

当在hibernate中插入/更新实体并且只想更新对更新实体的更改时,是否可以只设置保存引用实体的外键ID?例如。

UserRole userRole = new UserRole();
userRole.setId(1);
User user = new User();
user.setUserRole(userRole);

userDao.update(user);
-OR-
userDao.insert(user);

或者我是否需要每次都从数据库获取完整引用的实体?例如。

UserRole userRole = userRoleDao.getById(1);
User user = new User();
user.setUserRole(userRole);

userDao.update(user);
-OR-
userDao.insert(user);

两者似乎都适合我。但我担心第二种方法会对性能产生影响,而第一种方法看起来像是糟糕的代码。

最佳答案

如果 idUserRole 的主键,则两者都是正确的。

  • 我更喜欢第一种方法。

当实体先前已被持久化时,您只需要主键来引用已创建的实体。这种情况在数据库中也会发生,如果你查看 User 表,你不会找到完整的 UserRole,你只会找到主键。


But I'm afraid there'll be performance impact on second approach

一切都取决于数据库所在的位置,如果您不执行此操作数百万次,对性能的影响可以忽略不计,但如果远程数据库和连接不良,时间可能会增加。

关于java - 在 Hibernate 中插入/更新一个实体与另一个引用的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38114918/

相关文章:

java - Android 外部库项目上的 NoClassDefFoundError

java - for 循环中的字符串连接。 Java 9

java - 在我的事务中获取 org.hibernate.NonUniqueObjectException

java - 将现有数据库中的表映射到对象——Hibernate 适合吗?

java - 在 Java 中计算这个数学表达式时,我在哪里搞砸了?

java - Eclipse Che - 如何连接现有的 Eclipse 安装?

java - 关于 Volatile 这篇文章的问题

c# - 如何从 Hibernate/NHibernate 中的值对象引用实体?

hibernate - persistence.xml 中 jpa 的 C3p0 连接池不起作用?

java - 如何在java独立应用程序中加载hibernate.cfg.xml文件