当在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);
两者似乎都适合我。但我担心第二种方法会对性能产生影响,而第一种方法看起来像是糟糕的代码。
最佳答案
如果 id
是 UserRole
的主键,则两者都是正确的。
- 我更喜欢第一种方法。
当实体先前已被持久化时,您只需要主键来引用已创建的实体。这种情况在数据库中也会发生,如果你查看 User 表,你不会找到完整的 UserRole,你只会找到主键。
But I'm afraid there'll be performance impact on second approach
一切都取决于数据库所在的位置,如果您不执行此操作数百万次,对性能的影响可以忽略不计,但如果远程数据库和连接不良,时间可能会增加。
关于java - 在 Hibernate 中插入/更新一个实体与另一个引用的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38114918/