[jboss-user] [EJB 3.0] - Re: Need some help with mapping

fhh do-not-reply at jboss.com
Tue Apr 3 19:33:33 EDT 2007


Okay. I think I'm starting to grasp what you want.

You have a store and each store is of a certain type? So you have stores of the type "department store", "hardware store" etc.

I guess there are fewer types of stores than stores. If that is so you do not have a @OneToOne relationship but @ManyToOne: Many stores belong to one store type. In SQL terminology this would be a 1:n relationship between types and stores.

If that is the case you can simply do this (leaving aside your table_name problem for a moment):


  | public class Store {
  |   private Type storeType;
  |   @ManyToOne
  |   @JoinColumn(name = "STORE_TYPE_ID")
  |     public Type getStoreType() {
  |         return storeType;
  |     }
  | //
  | }
  | 

If you set up the Type class correctly the persistence layer will automatically determine that  the join column must refer to TYPE.TYPE_ID and add a constraint to enforce this foreign key relationship if necessary.

Just to make this complete: I would strongly recommend that you drop your requirement of having the table_name in your type table. (I assume this is not really a table_name for use in dynamic sql but a string value to identify the "type of type" :-)) If you want this it would require you to use composite keys which is IMHO painful.

But THEORETICALLY you could do it like this: You create a class TypePK for the primary key of Type with a field for TYPE_ID (Integer) and a String for TABLE_NAME and annotate the class with  @Embeddable, then you replace the type_id and table_name properties with a single property of the  TypePk class and annotate it with @EmbeddedId. 
Then you change your @ManyToOne relationship to something like:

@ManyTo
@JoinColumns({
        @JoinColumn(name="STORE_TYPE_ID", referencedColumnName="TYPE_ID"),
        @JoinColumn(name="TABLE_NAME", referencedColumnName="TABLE_NAME")
    })

Finally adjust the setter of your Store to prevent setting types that do not have "STORE" as the table_name property of the type's typePK.

Sounds complicated? It is -  and in my opinion not worth the effort.

Regards

Felix

P.S.: BTW: If the relationship between store and type is really 1:1 then you could solve this more elegantly by using the inheritance strategy joined.


View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4034352#4034352

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4034352



More information about the jboss-user mailing list