[jboss-user] [EJB 3.0] - Mapping-Problem with Primary-Key containing three Foreign-Ke
ttrepper
do-not-reply at jboss.com
Sat Sep 22 08:14:10 EDT 2007
Hi all,
I am sorry, but i cannot get it working. I have three tables with a PK beeing a single attribute. And then I have another table, with three attributes each referencing the PK of one table. And these three attributes are at the same time the PrimaryKey (PK)
SQL looks like this:
| CREATE TABLE ListedSections (
| SectionID SMALLINT NOT NULL,
| SectionName CHARACTER VARYING(50) NOT NULL,
| SectionDescription CHARACTER VARYING(150),
| DateAdded TIMESTAMP DEFAULT current_timestamp,
| ActiveUntil TIMESTAMP,
| CONSTRAINT PK_ListedSections PRIMARY KEY (SectionID)
| );
|
| CREATE TABLE ListedRights (
| RightID SMALLINT NOT NULL,
| RightName CHARACTER VARYING(50) NOT NULL,
| RightDescription CHARACTER VARYING(150),
| DateAdded TIMESTAMP DEFAULT current_timestamp,
| ActiveUntil TIMESTAMP,
| CONSTRAINT PK_ListedRights PRIMARY KEY (RightID)
| );
|
| CREATE TABLE ListedRoles (
| RoleID SMALLINT NOT NULL,
| RoleName CHARACTER VARYING(40) NOT NULL,
| RoleDescription CHARACTER VARYING(150),
| DateAdded TIMESTAMP DEFAULT current_timestamp,
| ActiveUntil TIMESTAMP,
| CONSTRAINT PK_ListedRoles PRIMARY KEY (RoleID)
| );
|
| CREATE TABLE RoleHasRights (
| RightID SMALLINT NOT NULL,
| RoleID SMALLINT NOT NULL,
| SectionID SMALLINT NOT NULL,
| CONSTRAINT PK_RoleHasRights PRIMARY KEY (RightID, RoleID, SectionID)
| );
|
| ALTER TABLE RoleHasRights ADD CONSTRAINT ListedRights_RoleHasRights
| FOREIGN KEY (RightID) REFERENCES ListedRights (RightID);
|
| ALTER TABLE RoleHasRights ADD CONSTRAINT ListedRoles_RoleHasRights
| FOREIGN KEY (RoleID) REFERENCES ListedRoles (RoleID);
|
| ALTER TABLE RoleHasRights ADD CONSTRAINT ListedSections_RoleHasRights
| FOREIGN KEY (SectionID) REFERENCES ListedSections (SectionID);
|
My Entities are looking like this:
| package myPackage;
|
| import java.io.Serializable;
| import java.sql.Timestamp;
| import java.util.Collection;
| import java.util.ArrayList;
|
| import javax.persistence.Entity;
| import javax.persistence.Id;
| import javax.persistence.JoinColumn;
| import javax.persistence.OneToMany;
| import javax.persistence.Table;
|
| @Entity
| @Table(name="listedroles", schema="public", catalog="postgres")
| public class Role implements Serializable {
| private static final long serialVersionUID = 1L;
| private int roleid;
| private String roleName;
| private String roleDescription;
| private Timestamp dateadded;
| private Timestamp activeuntil;
| private Collection<RoleHasRights> roleHasRights = new ArrayList<RoleHasRights>();
|
| //--------------------------------------------------------------------------
| @Id
| public int getRoleid() {
| return this.roleid;
| }
|
| //--------------------------------------------------------------------------
| public void setRoleid(int roleid) {
| this.roleid = roleid;
| }
|
| //--------------------------------------------------------------------------
| public String getRoleName() {
| return this.roleName;
| }
|
| //--------------------------------------------------------------------------
| public void setRoleName(String roleName) {
| this.roleName = roleName;
| }
|
| //--------------------------------------------------------------------------
| public String getRoleDescription() {
| return this.roleDescription;
| }
|
| //--------------------------------------------------------------------------
| public void setRoleDescription(String roleDescription) {
| this.roleDescription = roleDescription;
| }
|
| //--------------------------------------------------------------------------
| public Timestamp getDateadded() {
| return this.dateadded;
| }
|
| //--------------------------------------------------------------------------
| public void setDateadded(Timestamp dateadded) {
| this.dateadded = dateadded;
| }
|
| //--------------------------------------------------------------------------
| public Timestamp getActiveuntil() {
| return this.activeuntil;
| }
|
| //--------------------------------------------------------------------------
| public void setActiveuntil(Timestamp activeuntil) {
| this.activeuntil = activeuntil;
| }
|
| //--------------------------------------------------------------------------
| @OneToMany(mappedBy="roleHasRightsPK.roleid")
| @JoinColumn(name="roleHasRightsPK")
| public Collection<RoleHasRights> getRoleHasRights() {
| return this.roleHasRights;
| }
|
| //--------------------------------------------------------------------------
| public void setRoleHasRights(Collection<RoleHasRights> roleHasRights) {
| this.roleHasRights = roleHasRights;
| }
| }
|
Sections and Rights are nearly the same
And RoleHasRights:
| package com.auctonova.ejb.admin.persitence;
|
| import java.io.Serializable;
|
| import javax.persistence.Table;
| import javax.persistence.Entity;
| import javax.persistence.Embeddable;
| import javax.persistence.EmbeddedId;
| import javax.persistence.ManyToOne;
|
| @Entity
| @Table(name="rolehasrights", schema="public", catalog="postgres")
| public class RoleHasRights implements Serializable {
| private static final long serialVersionUID = 1L;
| private RoleHasRightsPK roleHasRightsPK;
|
| //--------------------------------------------------------------------------
| @EmbeddedId
| @ManyToOne
| public RoleHasRightsPK getRoleHasRightsPK() {
| return roleHasRightsPK;
| }
|
| //--------------------------------------------------------------------------
| public void setRoleHasRightsPK(RoleHasRightsPK roleHasRightsPK) {
| this.roleHasRightsPK = roleHasRightsPK;
| }
|
| //--------------------------------------------------------------------------
| public int getRoleid() {
| return this.roleHasRightsPK.roleid;
| }
|
| //--------------------------------------------------------------------------
| public void setRoleid(int roleid) {
| this.roleHasRightsPK.roleid = roleid;
| }
|
| //--------------------------------------------------------------------------
| public int getRightid() {
| return this.roleHasRightsPK.rightid;
| }
|
| //--------------------------------------------------------------------------
| public void setRightid(int rightid) {
| this.roleHasRightsPK.rightid = rightid;
| }
|
| //--------------------------------------------------------------------------
| public int getSectionid() {
| return this.roleHasRightsPK.sectionid;
| }
|
| //--------------------------------------------------------------------------
| public void setSectionid(int sectionid) {
| this.roleHasRightsPK.sectionid = sectionid;
| }
|
|
| //--------------------------------------------------------------------------
| @Embeddable
| public static class RoleHasRightsPK implements Serializable {
| private static final long serialVersionUID = 1L;
| private int roleid;
| private int rightid;
| private int sectionid;
|
| //----------------------------------------------------------------------
| public RoleHasRightsPK() {
| super();
| }
|
| //----------------------------------------------------------------------
| public int getRoleid() {
| return roleid;
| }
|
| //----------------------------------------------------------------------
| public void setRoleid(int roleid) {
| this.roleid = roleid;
| }
|
| //----------------------------------------------------------------------
| public int getRightid() {
| return rightid;
| }
|
| //----------------------------------------------------------------------
| public void setRightid(int rightid) {
| this.rightid = rightid;
| }
|
| //----------------------------------------------------------------------
| public int getSectionid() {
| return sectionid;
| }
|
| //----------------------------------------------------------------------
| public void setSectionid(int sectionid) {
| this.sectionid = sectionid;
| }
|
| //----------------------------------------------------------------------
| @Override
| public boolean equals(Object o) {
| if (o == this) {
| return true;
| }
| if ( ! (o instanceof RoleHasRightsPK)) {
| return false;
| }
| RoleHasRightsPK other = (RoleHasRightsPK) o;
| return (this.roleid == other.roleid)
| && (this.rightid == other.rightid)
| && (this.sectionid == other.sectionid);
| }
|
| //----------------------------------------------------------------------
| @Override
| public int hashCode() {
| return ((int) (this.roleid ^ (this.roleid >>> 32)))
| ^ ((int) (this.rightid ^ (this.rightid >>> 32)))
| ^ this.sectionid;
| }
| }
| }
|
Can anybody help my getting this working? Thank you very much and kind regards,
Thomas
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4087499#4087499
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4087499
More information about the jboss-user
mailing list