Hibernate-一个链接表中的多个关联(外键)

Hibernate-一个链接表中的多个关联(外键),hibernate,linktable,Hibernate,Linktable,我的问题是: 我想用hibernate映射一个链接表中3个不同表的主键 这张照片应该是什么样子的: 我设法保存了这些对象,但无法用select加载 首先,我的课程是: SysTenant.java: @Entity @Table(name = "SYSTENANT") public class SysTenant { private long sysTenantId; private String name; pri

我的问题是:

我想用hibernate映射一个链接表中3个不同表的主键

这张照片应该是什么样子的:

我设法保存了这些对象,但无法用select加载

首先,我的课程是:

SysTenant.java:

        @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”);
}
列表保持为空

选择是否正确,或者我的型号中是否存在其他错误?

如果有人能帮我,我将不胜感激

谢谢