Hibernate实体按自定义字段联接

Hibernate实体按自定义字段联接,hibernate,spring-boot,spring-data-jpa,Hibernate,Spring Boot,Spring Data Jpa,我有两个实体-用户和角色,如下所示 @Entity @Table(name = "USER") public class UserObj implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name = "USER_ID") private long userId; @Column(name = "USER_NM") pri

我有两个实体-用户和角色,如下所示

@Entity
@Table(name = "USER")
public class UserObj implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "USER_ID")
    private long userId;

    @Column(name = "USER_NM")
    private String userNm;

    @Column(name = "USER_EMAIL")
    private String userEmail;

    @Column(name = "ROLE_ID")
    private String roleId;

    ---getter setter----
}

@Entity
@Table(name = "ROLE")
public class RoleObj implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ROLE_ID")
    private long roleId;

    @Column(name = "ROLE_NM")
    private String roleNm;

    @Column(name = "ROLE_DESC")
    private String roleDesc;

    ---getter setter----
}
用户表将具有来自角色表的角色id


在查询实体(使用hibernate)时,如何在用户对象(不是作为角色对象)中获取角色\u nm,而仅获取角色\u nm字符串字段

您需要在UserObj类中添加一个字段并使用注释。像这样:

@Fomula( "( SELECT r.role_nm FROM role r WHERE r.role_id = role_id )" )
private String roleNm;

您可以将角色对象添加到具有多通关系和急取类型的用户实体中。通过这种方式,无论何时获取用户对象,都将使用user获取角色对象

  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "ROLE_ID")
  private RoleObj roleObj;
在那之后,你可以得到这样一个用户的roleNm

user.getRoleObj().getRoleNm()

@公式注释解决了我的问题。我能够在实体中添加新字段并为其分配自定义查询。