我有一些保留用户的 jpa 代码,该用户具有一组权限。sql中的表是两列,user_id和权限。但是,当我尝试读取该用户时,生成的 sql 会消失。具体来说,这两个列被多次选择。这是一些相关的代码...
实体类...
@Entity
@Table(name="users")
public class User implements Storable{
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="user_id",referencedColumnName="user_id")
private Set<Permission> permissions;
}
@Entity
@Table(name="permissions")
public class Permission implements Storable{
@EmbeddedId
PermissionPK id;
@MapsId("userId")
@ManyToOne
@JoinColumn(name="user_id")
User user;
}
@Embeddable
class PermissionPK implements Serializable{
@Column(name="user_id")
int userId;
@Column(name="permission")
String type;
}
查询的代码...
User u = em.find(User.class, 262);
这是为查找权限而生成的查询...
select
permission0_.user_id as user2_8_1_,
permission0_.permission as permissi1_3_1_,
permission0_.user_id as user2_3_1_,
permission0_.permission as permissi1_3_0_,
permission0_.user_id as user2_3_0_
from
permissions permission0_
where
permission0_.user_id=?
我一生都无法弄清楚为什么 user_id 列被选择了 3 次,而权限列被选择了两次。它最终对我来说没问题,因为我将权限存储在一组中,因此删除了重复项。但我想知道它为什么这样做,以便我可以解决我可能不会存储在集合中的未来问题