我有一些实体,例如User
class User{
private Long id;
private String Name;
private List<Role> roles;
}
当我从DB获得此用户时,我有user = UserDao.getUser(1);
我有一些List<Role> someList;
我需要将user.getRoles()
复制到someList
但如果我写user = user.getRoles()
Role
中的所有someList
个对象的ID都不为空;
我想将someList
设置为另一个用户,但如果ID不为空,我就无法使用它。
我可以做到这个
for (Role role: user.getRoles()) {
role.setId(null);
someList.add(role);
}
但我认为这是不好的做法。也许你知道最好的方法吗?
答案 0 :(得分:1)
假设您在一个事务中并且不想在不同用户之间重用Role
个对象:使用hibernate的工作方式,您需要创建 new 角色对象,否则Hibernate会知道您将同一个实例分配给另一个对象,并且完全忽略您已将id设置为null。
就个人而言,我认为会在名为Role
的{{1}}类中创建一个静态方法,它接收一个角色列表并实例化新角色(没有id)。
重要的一个重要问题是:您真的不想重复使用角色对象吗?并且可能有两个具有相同数据的角色,但只分配给不同的用户(可能违反第三范式......但这取决于您的要求)。
答案 1 :(得分:0)
这是一个例子。我自己组成了角色类,因为你没有提供它的任何源代码:
public class Role {
private int id;
private String someAttribute;
private int otherAttribute;
public Role(String someAttribute, int otherAttribute) {
this.someAttribute = someAttribute;
this.otherAttribute = otherAttribute;
}
// Other class methods omited for readability
public Role clone() {
return new Role(someAttribute, otherAttribute);
}
}
编辑:你可以这样做你的循环:
for (Role role: user.getRoles()) {
someList.add(role.clone());
}