我有一个关于使用hql的2个实体之间的连接的问题。
从userProfile开始,我必须检索与此userProfile关联的角色的名称。所以我需要进行连接才能将其放入角色表中。
我有以下类UserProfile:
@Entity
@Table(name="USER_PROFILES")
public class UserProfile extends VersionedObject implements Serializable {
public static final int CAID_LENGTH = 64;
@Column(nullable=false, length=CAID_LENGTH)
private String caid;
@Column(length=255)
private String description;
@CollectionOfElements
@JoinTable(
name="USER_ROLES",
joinColumns={
@JoinColumn(name="user_id", referencedColumnName="id"),
@JoinColumn(name="user_v_no", referencedColumnName="v_no")
})
@Column(name="role_id")
private Set<Integer> roleIds;
这是Role.java类:
@Entity
@Table(name="ROLES")
public class Role extends VersionedObject implements Serializable {
@Column(nullable=false, length=255)
private String name;
@Column(length=255)
private String description;
@CollectionOfElements
@JoinTable(
name="ROLES_RIGHTS",
joinColumns={
@JoinColumn(name="role_v_no", referencedColumnName="v_no"),
@JoinColumn(name="role_id", referencedColumnName="id")
})
private Set<Right> rights;
您知道如何基于userProfile.java中的private Set<Integer> roleIds
建立连接以检索关联角色以便检索名称吗?
非常感谢:)
答案 0 :(得分:0)
我会说你代表你的桌子,而不是代表现实世界的对象关系。通过这种方式,我的意思是你应该不映射角色的ID,而是实际的角色类。
所以,而不是映射这个:
private Set<Integer> roleIds;
尝试映射:
private Set<Role> roles;
您对Set<Right> rights
进行了正确的操作,因此,不确定为什么要在Set<Integer> roleIds
中映射ID而不是对象。
之后,您应该能够简单地执行userProfile.roles
,检索一整套角色,包括其名称。