Hibernate-一个链接表中的多个关联(外键)
我的问题是: 我想用hibernate映射一个链接表中3个不同表的主键 这张照片应该是什么样子的: 我设法保存了这些对象,但无法用select加载 首先,我的课程是: SysTenant.java:Hibernate-一个链接表中的多个关联(外键),hibernate,linktable,Hibernate,Linktable,我的问题是: 我想用hibernate映射一个链接表中3个不同表的主键 这张照片应该是什么样子的: 我设法保存了这些对象,但无法用select加载 首先,我的课程是: SysTenant.java: @Entity @Table(name = "SYSTENANT") public class SysTenant { private long sysTenantId; private String name; pri
@Entity
@Table(name = "SYSTENANT")
public class SysTenant {
private long sysTenantId;
private String name;
private Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation = new HashSet<SysTenantSysUserSysRoleAssociation>();
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "increment")
@Column(name = "SYSTENANTID", nullable = false)
public long getSysTenantId() {
return sysTenantId;
}
public void setSysTenantId(long sysTenantId) {
this.sysTenantId = sysTenantId;
}
@Column(name = "NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(mappedBy = "pk.sysTenant")
public Set<SysTenantSysUserSysRoleAssociation> getTenantUserRoleAssociation() {
return tenantUserRoleAssociation;
}
public void setTenantUserRoleAssociation(
Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation) {
this.tenantUserRoleAssociation = tenantUserRoleAssociation;
}
}
@Entity
@Table(name = "SYSUSER")
public class SysUser {
//----------------------
// Constants
//----------------------
//----------------------
// Properties
//----------------------
private long sysUserId;
private String firstname;
private long tenantId;
private Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation = new HashSet<SysTenantSysUserSysRoleAssociation>();
//----------------------
// Getter/Setter
//----------------------
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "increment")
@Column(name = "SYSUSERID", nullable = false)
public long getSysUserId() {
return sysUserId;
}
public void setSysUserId(long sysUserId) {
this.sysUserId = sysUserId;
}
@Column(name = "FIRSTNAME")
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
@Column(name="TENANTID")
public long getTenantId() {
return tenantId;
}
public void setTenantId(long tenantId) {
this.tenantId = tenantId;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.sysUser")
public Set<SysTenantSysUserSysRoleAssociation> getTenantUserRoleAssociation() {
return tenantUserRoleAssociation;
}
public void setTenantUserRoleAssociation(
Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation) {
this.tenantUserRoleAssociation = tenantUserRoleAssociation;
}
}
@Entity
@Table(name = "SYSROLE")
public class SysRole {
private long sysRoleId;
private String name;
private Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation = new HashSet<SysTenantSysUserSysRoleAssociation>();
private Set<SysRoleSysTaskAssociation> roleTaskAssociation = new HashSet<SysRoleSysTaskAssociation>();
// ----------------------
// Getter/Setter
// ----------------------
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "increment")
@Column(name = "SYSROLEID", nullable = false)
public long getSysRoleId() {
return sysRoleId;
}
public void setSysRoleId(long sysRoleId) {
this.sysRoleId = sysRoleId;
}
@Column(name = "NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.sysRole")
public Set<SysRoleSysTaskAssociation> getRoleTaskAssociation() {
return roleTaskAssociation;
}
public void setRoleTaskAssociation(Set<SysRoleSysTaskAssociation> roleTaskAssociation) {
this.roleTaskAssociation = roleTaskAssociation;
}
@OneToMany(mappedBy = "pk.sysRole")
public Set<SysTenantSysUserSysRoleAssociation> getTenantUserRoleAssociation() {
return tenantUserRoleAssociation;
}
public void setTenantUserRoleAssociation(
Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation) {
this.tenantUserRoleAssociation = tenantUserRoleAssociation;
}
}
@Entity
@Table(name = "SYSTENANT_SYSUSER_SYSROLE")
@AssociationOverrides({
@AssociationOverride(name = "pk.sysTenant", joinColumns = @JoinColumn(name = "SYSTENANTID")),
@AssociationOverride(name = "pk.sysUser", joinColumns = @JoinColumn(name = "SYSUSERID")),
@AssociationOverride(name = "pk.sysRole", joinColumns = @JoinColumn(name = "SYSROLEID")) })
public class SysTenantSysUserSysRoleAssociation {
private TenantUserRolePK pk = new TenantUserRolePK();
//----------------------
// Getter/Setter
//----------------------
@EmbeddedId
public TenantUserRolePK getPk() {
return pk;
}
public void setPk(TenantUserRolePK pk) {
this.pk = pk;
}
@Transient
public SysTenant getSysTenant() {
return pk.getSysTenant();
}
public void setSysTenant(SysTenant sysTenant) {
pk.setSysTenant(sysTenant);
}
@Transient
public SysUser getSysUser() {
return pk.getSysUser();
}
public void setSysUser(SysUser sysUser) {
pk.setSysUser(sysUser);
}
@Transient
public SysRole getSysRole() {
return pk.getSysRole();
}
public void setSysRole(SysRole sysRole) {
pk.setSysRole(sysRole);
}
//----------------------
// Classes
//----------------------
@SuppressWarnings("serial")
@Embeddable
private class TenantUserRolePK implements Serializable {
private SysTenant sysTenant;
private SysUser sysUser;
private SysRole sysRole;
@ManyToOne
public SysTenant getSysTenant() {
return sysTenant;
}
public void setSysTenant(SysTenant sysTenant) {
this.sysTenant = sysTenant;
}
@ManyToOne
public SysUser getSysUser() {
return sysUser;
}
public void setSysUser(SysUser sysUser) {
this.sysUser = sysUser;
}
@ManyToOne
public SysRole getSysRole() {
return sysRole;
}
public void setSysRole(SysRole sysRole) {
this.sysRole = sysRole;
}
}
}
public void sysTenantSysUserSysRoleAssociationTest(){
SysTenantSysUserSysRoleAssociation association = new SysTenantSysUserSysRoleAssociation();
SysUser sysUser = new SysUser();
sysUser.setFirstname("Steve");
association.setSysUser(sysUser);
SysRole sysRole = new SysRole();
sysRole.setName("User");
association.setSysRole(sysRole);
SysTenant sysTenant = new SysTenant();
sysTenant.setName("Tenant1");
association.setSysTenant(sysTenant);
new SysUserDAO().createUser(sysUser);
new SysDataDAO().saveSysObject(sysRole);
new SysDataDAO().saveSysObject(sysTenant);
new SysDataDAO().saveSysObject(association);
}
为了测试对象是否保存,我使用以下方法:
@Entity
@Table(name = "SYSTENANT")
public class SysTenant {
private long sysTenantId;
private String name;
private Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation = new HashSet<SysTenantSysUserSysRoleAssociation>();
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "increment")
@Column(name = "SYSTENANTID", nullable = false)
public long getSysTenantId() {
return sysTenantId;
}
public void setSysTenantId(long sysTenantId) {
this.sysTenantId = sysTenantId;
}
@Column(name = "NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(mappedBy = "pk.sysTenant")
public Set<SysTenantSysUserSysRoleAssociation> getTenantUserRoleAssociation() {
return tenantUserRoleAssociation;
}
public void setTenantUserRoleAssociation(
Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation) {
this.tenantUserRoleAssociation = tenantUserRoleAssociation;
}
}
@Entity
@Table(name = "SYSUSER")
public class SysUser {
//----------------------
// Constants
//----------------------
//----------------------
// Properties
//----------------------
private long sysUserId;
private String firstname;
private long tenantId;
private Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation = new HashSet<SysTenantSysUserSysRoleAssociation>();
//----------------------
// Getter/Setter
//----------------------
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "increment")
@Column(name = "SYSUSERID", nullable = false)
public long getSysUserId() {
return sysUserId;
}
public void setSysUserId(long sysUserId) {
this.sysUserId = sysUserId;
}
@Column(name = "FIRSTNAME")
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
@Column(name="TENANTID")
public long getTenantId() {
return tenantId;
}
public void setTenantId(long tenantId) {
this.tenantId = tenantId;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.sysUser")
public Set<SysTenantSysUserSysRoleAssociation> getTenantUserRoleAssociation() {
return tenantUserRoleAssociation;
}
public void setTenantUserRoleAssociation(
Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation) {
this.tenantUserRoleAssociation = tenantUserRoleAssociation;
}
}
@Entity
@Table(name = "SYSROLE")
public class SysRole {
private long sysRoleId;
private String name;
private Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation = new HashSet<SysTenantSysUserSysRoleAssociation>();
private Set<SysRoleSysTaskAssociation> roleTaskAssociation = new HashSet<SysRoleSysTaskAssociation>();
// ----------------------
// Getter/Setter
// ----------------------
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "increment")
@Column(name = "SYSROLEID", nullable = false)
public long getSysRoleId() {
return sysRoleId;
}
public void setSysRoleId(long sysRoleId) {
this.sysRoleId = sysRoleId;
}
@Column(name = "NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.sysRole")
public Set<SysRoleSysTaskAssociation> getRoleTaskAssociation() {
return roleTaskAssociation;
}
public void setRoleTaskAssociation(Set<SysRoleSysTaskAssociation> roleTaskAssociation) {
this.roleTaskAssociation = roleTaskAssociation;
}
@OneToMany(mappedBy = "pk.sysRole")
public Set<SysTenantSysUserSysRoleAssociation> getTenantUserRoleAssociation() {
return tenantUserRoleAssociation;
}
public void setTenantUserRoleAssociation(
Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation) {
this.tenantUserRoleAssociation = tenantUserRoleAssociation;
}
}
@Entity
@Table(name = "SYSTENANT_SYSUSER_SYSROLE")
@AssociationOverrides({
@AssociationOverride(name = "pk.sysTenant", joinColumns = @JoinColumn(name = "SYSTENANTID")),
@AssociationOverride(name = "pk.sysUser", joinColumns = @JoinColumn(name = "SYSUSERID")),
@AssociationOverride(name = "pk.sysRole", joinColumns = @JoinColumn(name = "SYSROLEID")) })
public class SysTenantSysUserSysRoleAssociation {
private TenantUserRolePK pk = new TenantUserRolePK();
//----------------------
// Getter/Setter
//----------------------
@EmbeddedId
public TenantUserRolePK getPk() {
return pk;
}
public void setPk(TenantUserRolePK pk) {
this.pk = pk;
}
@Transient
public SysTenant getSysTenant() {
return pk.getSysTenant();
}
public void setSysTenant(SysTenant sysTenant) {
pk.setSysTenant(sysTenant);
}
@Transient
public SysUser getSysUser() {
return pk.getSysUser();
}
public void setSysUser(SysUser sysUser) {
pk.setSysUser(sysUser);
}
@Transient
public SysRole getSysRole() {
return pk.getSysRole();
}
public void setSysRole(SysRole sysRole) {
pk.setSysRole(sysRole);
}
//----------------------
// Classes
//----------------------
@SuppressWarnings("serial")
@Embeddable
private class TenantUserRolePK implements Serializable {
private SysTenant sysTenant;
private SysUser sysUser;
private SysRole sysRole;
@ManyToOne
public SysTenant getSysTenant() {
return sysTenant;
}
public void setSysTenant(SysTenant sysTenant) {
this.sysTenant = sysTenant;
}
@ManyToOne
public SysUser getSysUser() {
return sysUser;
}
public void setSysUser(SysUser sysUser) {
this.sysUser = sysUser;
}
@ManyToOne
public SysRole getSysRole() {
return sysRole;
}
public void setSysRole(SysRole sysRole) {
this.sysRole = sysRole;
}
}
}
public void sysTenantSysUserSysRoleAssociationTest(){
SysTenantSysUserSysRoleAssociation association = new SysTenantSysUserSysRoleAssociation();
SysUser sysUser = new SysUser();
sysUser.setFirstname("Steve");
association.setSysUser(sysUser);
SysRole sysRole = new SysRole();
sysRole.setName("User");
association.setSysRole(sysRole);
SysTenant sysTenant = new SysTenant();
sysTenant.setName("Tenant1");
association.setSysTenant(sysTenant);
new SysUserDAO().createUser(sysUser);
new SysDataDAO().saveSysObject(sysRole);
new SysDataDAO().saveSysObject(sysTenant);
new SysDataDAO().saveSysObject(association);
}
执行后,将正确的对象ID保存到数据库和链接表中。
这是我的问题:
@Entity
@Table(name = "SYSTENANT")
public class SysTenant {
private long sysTenantId;
private String name;
private Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation = new HashSet<SysTenantSysUserSysRoleAssociation>();
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "increment")
@Column(name = "SYSTENANTID", nullable = false)
public long getSysTenantId() {
return sysTenantId;
}
public void setSysTenantId(long sysTenantId) {
this.sysTenantId = sysTenantId;
}
@Column(name = "NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(mappedBy = "pk.sysTenant")
public Set<SysTenantSysUserSysRoleAssociation> getTenantUserRoleAssociation() {
return tenantUserRoleAssociation;
}
public void setTenantUserRoleAssociation(
Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation) {
this.tenantUserRoleAssociation = tenantUserRoleAssociation;
}
}
@Entity
@Table(name = "SYSUSER")
public class SysUser {
//----------------------
// Constants
//----------------------
//----------------------
// Properties
//----------------------
private long sysUserId;
private String firstname;
private long tenantId;
private Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation = new HashSet<SysTenantSysUserSysRoleAssociation>();
//----------------------
// Getter/Setter
//----------------------
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "increment")
@Column(name = "SYSUSERID", nullable = false)
public long getSysUserId() {
return sysUserId;
}
public void setSysUserId(long sysUserId) {
this.sysUserId = sysUserId;
}
@Column(name = "FIRSTNAME")
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
@Column(name="TENANTID")
public long getTenantId() {
return tenantId;
}
public void setTenantId(long tenantId) {
this.tenantId = tenantId;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.sysUser")
public Set<SysTenantSysUserSysRoleAssociation> getTenantUserRoleAssociation() {
return tenantUserRoleAssociation;
}
public void setTenantUserRoleAssociation(
Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation) {
this.tenantUserRoleAssociation = tenantUserRoleAssociation;
}
}
@Entity
@Table(name = "SYSROLE")
public class SysRole {
private long sysRoleId;
private String name;
private Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation = new HashSet<SysTenantSysUserSysRoleAssociation>();
private Set<SysRoleSysTaskAssociation> roleTaskAssociation = new HashSet<SysRoleSysTaskAssociation>();
// ----------------------
// Getter/Setter
// ----------------------
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "increment")
@Column(name = "SYSROLEID", nullable = false)
public long getSysRoleId() {
return sysRoleId;
}
public void setSysRoleId(long sysRoleId) {
this.sysRoleId = sysRoleId;
}
@Column(name = "NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.sysRole")
public Set<SysRoleSysTaskAssociation> getRoleTaskAssociation() {
return roleTaskAssociation;
}
public void setRoleTaskAssociation(Set<SysRoleSysTaskAssociation> roleTaskAssociation) {
this.roleTaskAssociation = roleTaskAssociation;
}
@OneToMany(mappedBy = "pk.sysRole")
public Set<SysTenantSysUserSysRoleAssociation> getTenantUserRoleAssociation() {
return tenantUserRoleAssociation;
}
public void setTenantUserRoleAssociation(
Set<SysTenantSysUserSysRoleAssociation> tenantUserRoleAssociation) {
this.tenantUserRoleAssociation = tenantUserRoleAssociation;
}
}
@Entity
@Table(name = "SYSTENANT_SYSUSER_SYSROLE")
@AssociationOverrides({
@AssociationOverride(name = "pk.sysTenant", joinColumns = @JoinColumn(name = "SYSTENANTID")),
@AssociationOverride(name = "pk.sysUser", joinColumns = @JoinColumn(name = "SYSUSERID")),
@AssociationOverride(name = "pk.sysRole", joinColumns = @JoinColumn(name = "SYSROLEID")) })
public class SysTenantSysUserSysRoleAssociation {
private TenantUserRolePK pk = new TenantUserRolePK();
//----------------------
// Getter/Setter
//----------------------
@EmbeddedId
public TenantUserRolePK getPk() {
return pk;
}
public void setPk(TenantUserRolePK pk) {
this.pk = pk;
}
@Transient
public SysTenant getSysTenant() {
return pk.getSysTenant();
}
public void setSysTenant(SysTenant sysTenant) {
pk.setSysTenant(sysTenant);
}
@Transient
public SysUser getSysUser() {
return pk.getSysUser();
}
public void setSysUser(SysUser sysUser) {
pk.setSysUser(sysUser);
}
@Transient
public SysRole getSysRole() {
return pk.getSysRole();
}
public void setSysRole(SysRole sysRole) {
pk.setSysRole(sysRole);
}
//----------------------
// Classes
//----------------------
@SuppressWarnings("serial")
@Embeddable
private class TenantUserRolePK implements Serializable {
private SysTenant sysTenant;
private SysUser sysUser;
private SysRole sysRole;
@ManyToOne
public SysTenant getSysTenant() {
return sysTenant;
}
public void setSysTenant(SysTenant sysTenant) {
this.sysTenant = sysTenant;
}
@ManyToOne
public SysUser getSysUser() {
return sysUser;
}
public void setSysUser(SysUser sysUser) {
this.sysUser = sysUser;
}
@ManyToOne
public SysRole getSysRole() {
return sysRole;
}
public void setSysRole(SysRole sysRole) {
this.sysRole = sysRole;
}
}
}
public void sysTenantSysUserSysRoleAssociationTest(){
SysTenantSysUserSysRoleAssociation association = new SysTenantSysUserSysRoleAssociation();
SysUser sysUser = new SysUser();
sysUser.setFirstname("Steve");
association.setSysUser(sysUser);
SysRole sysRole = new SysRole();
sysRole.setName("User");
association.setSysRole(sysRole);
SysTenant sysTenant = new SysTenant();
sysTenant.setName("Tenant1");
association.setSysTenant(sysTenant);
new SysUserDAO().createUser(sysUser);
new SysDataDAO().saveSysObject(sysRole);
new SysDataDAO().saveSysObject(sysTenant);
new SysDataDAO().saveSysObject(association);
}
如果我想选择持久化的sysUser并接收角色和tennant HashSet,由systennantsysusersysroleassocon表中的ID引用,代码如下:
public void getSysUser(){
SysDataDAO sysDataDato = new SysDataDAO();
List<?> result = sysDataDato.executeSysSelect("From SysUser");
}
public void getSysUser(){
SysDataDAO sysDataDato=新的SysDataDAO();
列表结果=sysDataDato.executeSysSelect(“来自SysUser”);
}
列表保持为空
选择是否正确,或者我的型号中是否存在其他错误?
如果有人能帮我,我将不胜感激
谢谢
娄