休眠实体通过自定义字段加入

问题描述 投票:0回答:2

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

@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。

同时查询实体(使用休眠),如何在用户对象(不是作为角色对象)中获取role_nm,而仅在role_nm字符串字段中获取。

hibernate spring-boot spring-data-jpa
2个回答
0
投票

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

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

0
投票

您可以将角色对象添加到具有ManyToOne关系并渴望获取类型的用户实体。这样,无论何时获取用户对象,都将与用户一起获取角色对象。

  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "ROLE_ID")
  private RoleObj roleObj;

之后,您可以像这样获得用户的roleNm

user.getRoleObj().getRoleNm()
© www.soinside.com 2019 - 2024. All rights reserved.