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()
@公式注释解决了我的问题。我能够在实体中添加新字段并为其分配自定义查询。