在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);
两者似乎都适合我。但我担心第二种方法会对性能产生影响,而第一种方法看起来就像是糟糕的代码。
答案 0 :(得分:4)
如果id
是UserRole
的主键,则两者都是正确的。
当实体先前已被持久化时,您只需要主键来引用已创建的实体。这也发生在数据库中,如果你看一下User表,你将找不到一个完整的UserRole,你只需要找到主键。
但我担心第二种方法会对性能产生影响
所有取决于数据库的位置,如果不进行此操作数百万次,性能影响可以忽略不计,但如果远程数据库和连接不良,则可以增加时间。