3

我有一些保留用户的 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 次,而权限列被选择了两次。它最终对我来说没问题,因为我将权限存储在一组中,因此删除了重复项。但我想知道它为什么这样做,以便我可以解决我可能不会存储在集合中的未来问题

4

0 回答 0