在Hibernate中插入/更新具有其他引用实体的实体

时间:2016-06-30 05:50:54

标签: 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);

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

1 个答案:

答案 0 :(得分:4)

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

  • 我更喜欢第一种方法。

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

  

但我担心第二种方法会对性能产生影响

所有取决于数据库的位置,如果不进行此操作数百万次,性能影响可以忽略不计,但如果远程数据库和连接不良,则可以增加时间。