You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Christopher Schmidt <fa...@googlemail.com> on 2011/02/11 11:33:51 UTC

Composite Id Mapping question

Hi all,

I have a problem with the best mapping of two tables: obj_item_assoc
and obj_item_assoc_stat.
Both share 3 of its primary keys.
The "XXX_obj_item" primary keys are a fk's to the entity ObjectItem - thats
why I modeled it as ManyToOne.

Creation works fine, but if I query for ObjectItemAssociationStatus the
fields subjObjItem and objObjItem are null !?
Is this because I used their columns in ObjectItemAssociation?

What would be the best way to map this (assuming that I did not do that)?

Thanks for helping

(I skipped some fields in the listings below)

-- 
Christopher
twitter: @fakod
blog: http://blog.fakod.eu





TABLE obj_item_assoc
(
  subj_obj_item_id numeric(20,0) NOT NULL,
  obj_obj_item_id numeric(20,0) NOT NULL,
  obj_item_assoc_ix numeric(20,0) NOT NULL,

  CONSTRAINT obj_item_assoc_pkey PRIMARY KEY (subj_obj_item_id,
obj_obj_item_id, obj_item_assoc_ix),

  CONSTRAINT obj_item_assoc_obj_obj_item_id_fkey FOREIGN KEY
(obj_obj_item_id)
      REFERENCES obj_item (obj_item_id),

  CONSTRAINT obj_item_assoc_subj_obj_item_id_fkey FOREIGN KEY
(subj_obj_item_id)
      REFERENCES obj_item (obj_item_id)
)


TABLE obj_item_assoc_stat
(
  subj_obj_item_id numeric(20,0) NOT NULL,
  obj_obj_item_id numeric(20,0) NOT NULL,
  obj_item_assoc_ix numeric(20,0) NOT NULL,
  obj_item_assoc_stat_ix numeric(20,0) NOT NULL,

  CONSTRAINT obj_item_assoc_stat_pkey PRIMARY KEY (subj_obj_item_id,
obj_obj_item_id, obj_item_assoc_ix, obj_item_assoc_stat_ix),

  CONSTRAINT obj_item_assoc_stat_subj_obj_item_id_fkey FOREIGN KEY
(subj_obj_item_id, obj_obj_item_id, obj_item_assoc_ix)
      REFERENCES obj_item_assoc (subj_obj_item_id, obj_obj_item_id,
obj_item_assoc_ix)
)




@Entity
@Table(name = "obj_item_assoc_stat")
@IdClass(ObjectItemAssociationStatus.ObjectItemAssociationStatusId.class)
public class ObjectItemAssociationStatus extends LoggableEntity {

    @Id
    @Column(name = "obj_item_assoc_stat_ix", nullable = false, length = 20)
    protected BigInteger ix;

    @Id
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "subj_obj_item_id", nullable = false, updatable =
false)
    protected ObjectItem subjObjItem;

    @Id
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "obj_obj_item_id", nullable = false, updatable =
false)
    protected ObjectItem objObjItem;

    @Id
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumns({@JoinColumn(name = "subj_obj_item_id",
referencedColumnName = "subj_obj_item_id", nullable = false),
            @JoinColumn(name = "obj_obj_item_id", referencedColumnName =
"obj_obj_item_id", nullable = false),
            @JoinColumn(name = "obj_item_assoc_ix", referencedColumnName =
"obj_item_assoc_ix", nullable = false)})
    protected ObjectItemAssociation objItemAssoc;
. . . }

@Entity
@Table(name = "obj_item_assoc")
@IdClass(ObjectItemAssociation.ObjectItemAssociationId.class)
public class ObjectItemAssociation extends NonIndependentEntity {

    @Id
    @Column(name = "obj_item_assoc_ix", nullable = false, length = 20)
    protected BigInteger ix;

    @Id
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "subj_obj_item_id", nullable = false, updatable =
false)
    protected ObjectItem subjObjItem;

    @Id
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "obj_obj_item_id", nullable = false, updatable =
false)
    protected ObjectItem objObjItem;
. . . }

Fwd: Composite Id Mapping question

Posted by Christopher Schmidt <fa...@googlemail.com>.
Hi, I posted this already to the user list and got no answer...

I think there is an error while retrieving a instance of
ObjectItemAssociationStatus.
Both Id fields (subjObjItem and objObjItem) are null in this case.

The query I am executing is: "select o from ObjectItemAssociationStatus o
 where o.ix = ?1 AND o.rptd.id = ?2"

Would be nice if someone could have a look at this.

Christopher

---------- Forwarded message ----------
From: Christopher Schmidt <fa...@googlemail.com>
Date: Fri, Feb 11, 2011 at 11:33 AM
Subject: Composite Id Mapping question
To: users@openjpa.apache.org


Hi all,

I have a problem with the best mapping of two tables: obj_item_assoc
and obj_item_assoc_stat.
Both share 3 of its primary keys.
The "XXX_obj_item" primary keys are a fk's to the entity ObjectItem - thats
why I modeled it as ManyToOne.

Creation works fine, but if I query for ObjectItemAssociationStatus the
fields subjObjItem and objObjItem are null !?
Is this because I used their columns in ObjectItemAssociation?

What would be the best way to map this (assuming that I did not do that)?

Thanks for helping

(I skipped some fields in the listings below)

-- 
Christopher
twitter: @fakod
blog: http://blog.fakod.eu





TABLE obj_item_assoc
(
  subj_obj_item_id numeric(20,0) NOT NULL,
  obj_obj_item_id numeric(20,0) NOT NULL,
  obj_item_assoc_ix numeric(20,0) NOT NULL,

  CONSTRAINT obj_item_assoc_pkey PRIMARY KEY (subj_obj_item_id,
obj_obj_item_id, obj_item_assoc_ix),

  CONSTRAINT obj_item_assoc_obj_obj_item_id_fkey FOREIGN KEY
(obj_obj_item_id)
      REFERENCES obj_item (obj_item_id),

  CONSTRAINT obj_item_assoc_subj_obj_item_id_fkey FOREIGN KEY
(subj_obj_item_id)
      REFERENCES obj_item (obj_item_id)
)


TABLE obj_item_assoc_stat
(
  subj_obj_item_id numeric(20,0) NOT NULL,
  obj_obj_item_id numeric(20,0) NOT NULL,
  obj_item_assoc_ix numeric(20,0) NOT NULL,
  obj_item_assoc_stat_ix numeric(20,0) NOT NULL,

  CONSTRAINT obj_item_assoc_stat_pkey PRIMARY KEY (subj_obj_item_id,
obj_obj_item_id, obj_item_assoc_ix, obj_item_assoc_stat_ix),

  CONSTRAINT obj_item_assoc_stat_subj_obj_item_id_fkey FOREIGN KEY
(subj_obj_item_id, obj_obj_item_id, obj_item_assoc_ix)
      REFERENCES obj_item_assoc (subj_obj_item_id, obj_obj_item_id,
obj_item_assoc_ix)
)




@Entity
@Table(name = "obj_item_assoc_stat")
@IdClass(ObjectItemAssociationStatus.ObjectItemAssociationStatusId.class)
public class ObjectItemAssociationStatus extends LoggableEntity {

    @Id
    @Column(name = "obj_item_assoc_stat_ix", nullable = false, length = 20)
    protected BigInteger ix;

    @Id
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "subj_obj_item_id", nullable = false, updatable =
false)
    protected ObjectItem subjObjItem;

    @Id
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "obj_obj_item_id", nullable = false, updatable =
false)
    protected ObjectItem objObjItem;

    @Id
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumns({@JoinColumn(name = "subj_obj_item_id",
referencedColumnName = "subj_obj_item_id", nullable = false),
            @JoinColumn(name = "obj_obj_item_id", referencedColumnName =
"obj_obj_item_id", nullable = false),
            @JoinColumn(name = "obj_item_assoc_ix", referencedColumnName =
"obj_item_assoc_ix", nullable = false)})
    protected ObjectItemAssociation objItemAssoc;
. . . }

@Entity
@Table(name = "obj_item_assoc")
@IdClass(ObjectItemAssociation.ObjectItemAssociationId.class)
public class ObjectItemAssociation extends NonIndependentEntity {

    @Id
    @Column(name = "obj_item_assoc_ix", nullable = false, length = 20)
    protected BigInteger ix;

    @Id
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "subj_obj_item_id", nullable = false, updatable =
false)
    protected ObjectItem subjObjItem;

    @Id
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "obj_obj_item_id", nullable = false, updatable =
false)
    protected ObjectItem objObjItem;
. . . }





-- 
Christopher
twitter: @fakod
blog: http://blog.fakod.eu