Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用hibernate进行连接_Hibernate_Hql_Criteria_Detachedcriteria - Fatal编程技术网

如何使用hibernate进行连接

如何使用hibernate进行连接,hibernate,hql,criteria,detachedcriteria,Hibernate,Hql,Criteria,Detachedcriteria,我有一个关于使用hql连接两个实体的问题 从userProfile开始,我必须检索与此userProfile关联的角色的名称。因此,我需要创建一个联接,以便将其放入角色表中 我有以下类UserProfile: @Entity @Table(name="USER_PROFILES") public class UserProfile extends VersionedObject implements Serializable { public static final int CAID_L

我有一个关于使用hql连接两个实体的问题

从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;
@实体
@表(name=“用户配置文件”)
公共类UserProfile扩展VersionedObject实现可序列化{
公共静态最终int CAID_长度=64;
@列(nullable=false,length=CAID\u length)
私有字符串caid;
@列(长度=255)
私有字符串描述;
@收藏费
@可接合(
name=“用户角色”,
连接柱={
@JoinColumn(name=“user\u id”,referencedColumnName=“id”),
@JoinColumn(name=“user\u v\u no”,referencedColumnName=“v\u no”)
})
@列(name=“role\u id”)
私人设置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;
@实体
@表(name=“ROLES”)
公共类角色扩展VersionedObject实现可序列化{
@列(nullable=false,长度=255)
私有字符串名称;
@列(长度=255)
私有字符串描述;
@收藏费
@可接合(
name=“角色\权限”,
连接柱={
@JoinColumn(name=“role\u v\u no”,referencedColumnName=“v\u no”),
@JoinColumn(name=“role\u id”,referencedColumnName=“id”)
})
私人设定权利;
您知道如何基于userProfile.java中的
私有集合roleIds
进行连接,以检索相关角色以检索名称吗


非常感谢:)

我想说,您是在表示表,而不是表示现实世界中的对象关系。我的意思是,您不应该映射角色的ID,而是映射实际的角色类

因此,与其映射这一点,不如:

private Set<Integer> roleIds;
私有集合roleIds;
尝试映射以下内容:

private Set<Role> roles;
私有集角色;
您正确地设置了
权限
,因此,不确定为什么要在
设置角色ID
中映射ID而不是对象

之后,您应该能够简单地执行
userProfile.roles
,检索一整套角色,包括其名称