Ah I see what you mean now.. I've done the same (with product-lines, stock items and size-colour variations (stockitems is also a linking table for many-to-many etc)).

Change of topic, but have you an example or know where a decent example or of using the composite id and all that jazz where you have to over-ride equals and hashCode. I need to get saveOrUpdate working for newly instantiated objects that perhaps exist already (if you catch my drift). The hibernate docs cover creating one's own mapping files but not using xdoclet to do so.

I'll have a go and then start a new thread, i haven't found much googling about but could be because I'm a tad green when it comes to model tier stuff.

Cheers Mark

On 11 Feb 2004, at 15:47, kaxell wrote:

Ok, I'll give you a simple example of a many-to-many relationship where you have some extra properties in the "joining" table and want to treat
this as an entity of its own. In the example you have a person who subscribes to some magazines. There is a many-to-many relationship between magazines and persons. The subscription contains, except the keys of a person and a magazine, a startdate and an enddate of the subscription (here treated as longs). In the example the relation is not set to be bi-directional, but it's simple to add this if you wish. So, from a Person you can get the magizines he/she subscribes on. I haven't actually tried to run this code through xdoclet but I think it will work, or at least you get the idea how it works.


Another thing...while sitting and playing with Hibernate and xdoclet i missed a template for generating the hibernate.cfg.xml file so I build one. This mail is already pretty long so I don't attach it here. But if anyone is interested just send another mail to the list and I'll give it to you.

Person
------
/**
 * @hibernate.class
 *   table="person"
 */
public class Person {
        private long id = -1;
        private String name = null;
        private String address = null;
        private Set subscriptions = null;
        
        /**
         * @hibernate.id
         *   generator-class="assigned"
         *   type="long"
         *   column="id"
         */
        public long getId() {
                return id;
        }
        public void setId(long id) {
                this.id = id;
        }
        
        /**
         * @hibernate.property
         *   column="name"
         *   type="java.lang.String"
         */
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        
        /**
         * @hibernate.property
         *   column="address"
         *   type="java.lang.String"
         */
        public String getAddress() {
                return address;
        }
        public void setAddress(String address) {
                this.address = address;
        }
        
        /**
         * @hibernate.set
         *   lazy="true"
         * @hibernate.collection-composite-element
         *   class="Subscription"
         * @hibernate.collection-key
         *   column="person_id"
         */
        public Set getSubscriptions() {
                return subscriptions;
        }
        public void setSubscriptions(Set subscriptions)
                this.subscriptions = subscriptions;
        }
}

Subscription
-------------

public class Subscription {
        
        private long fromDate = -1;
        private long toDate = -1;
        private Magazine magazine = null;
        
        /**
         * @hibernate.property
         *   column="fromdate"
         *   type="long"
         */
        public long getFromDate() {
                return fromDate
        }
        public long setFromDate(long fromDate) {
                this.fromDate = fromDate;
        }
        
        /**
         * @hibernate.property
         *   column="todate"
         *   type="long"
         */
        public long getToDate() {
                return toDate
        }
        public long setToDate(long toDate) {
                this.toDate = toDate;
        }
        
        /**
         * @hibternate.many-to-one
         *   column="function_id"
         */
        public Magzine getMagazine() {
                return magazine;
        }
        public void setMagazine(Magazine magazine) {
                this.magazine = magazine;
        }
}

Magazine
--------

/**
 * @hibernate.class
 *   table="magazine"
 */
public class Magazine {
        private long id = -1;
        private String name = null;
        
        **
         * @hibernate.id
         *   generator-class="assigned"
         *   type="long"
         *   column="id"
         */
        public long getId() {
                return id;
        }
        public void setId(long id) {
                this.id = id;
        }
        /**
         * @hibernate.property
         *   column="name"
         *   type="java.lang.String"
         */
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
}



Running this through xdoclet should generate a file, for Person (person.hmb.xml), like this:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd";>

<hibernate-mapping>
<class name="Person" table="person" dynamic-update="false" dynamic-insert="false">
<id name="id" column="id" type="long">
<generator class="assigned"></generator>
</id>
<property name="name" type="java.lang.String" update="true" insert="true" column="name" />
<set name="subsrciptions" lazy="true" inverse="false" cascade="none" sort="unsorted">
<key column="personid" />
<composite-element class="Subscription">
<property name="startDate" type="long" update="true" insert="true" column="startdate" />
<property name="endDate" type="long" update="true" insert="true" column="enddate" />
<many-to-one
name="magazine"
class="Magazine"
cascade="none"
outer-join="auto"
update="true"
insert="true"
column="magazineid" />
</composite-element>


        </set>
    </class>
</hibernate-mapping>

Good luck and let me know if you're having any problems.

/Klas

From: Mark Lowe <[EMAIL PROTECTED]> Date: 2004/02/10 ti PM 06:19:40 GMT To: [EMAIL PROTECTED] �mne: Re: [Xdoclet-user] Many to many with Hibernate

Yeah

I wouldn't mind having a butchers.. (uk idiom for take a look).



On 10 Feb 2004, at 12:29, kaxell wrote:

Hi,

Thanks for your replys, but the trick I used to get it working was
with the "@hibernate.collection-composite-element" tag. If anyone is
interested in seeing how it works just reply to this message and I'll
put an example on the list.

/Klas



From: "Shishir K. Singh" <[EMAIL PROTECTED]> Date: 2004/02/06 fr PM 04:23:22 GMT To: <[EMAIL PROTECTED]> �mne: RE: [Xdoclet-user] Many to many with Hibernate

I would say that have a look at the test suite that comes with the
xdoclet src and look for the hibernate examples. I think that I saw
something similar to what you need. I too had the same concerns but I
decided to opt the easy way out (due to lack of time) by putting id
in
each of my assocition class (that joins the two many to many class).




-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of kaxell
Sent: Friday, February 06, 2004 10:47 AM
To: [EMAIL PROTECTED]
Subject: [Xdoclet-user] Many to many with Hibernate


Hi,

I'm using xdoclet to generate my hibernate mapping files but I have a
problem when I'm trying to generate a many to many relationship. I
have
two tables which have a many to many relationship. They are linked to
eachother with a third table which also contains some extra properties
except the keys of the others. I have three separate classes and I'm
using a many-to-one relationship in the linking table to the other two
and from the two I'm using a one-to-many relationship. When I try to
generate the mapping files I get an exception which says that my
linking
table is missing an id.


What I understand is that I haven't got it right in the xdoclet tags
but
I don't know how to fix it. Does anyone have any suggestions or
examples
how to solve this? The doclet is looking something like this:

 /**
     * @hibernate.set
     *   lazy="true"
     *   inverse="true"
     * @hibernate.collection-key
     *   column="colId"
     * @hibernate.collection-one-to-many
     *   class="TheRelClass"
     *
     */

--------------

 /**
     * @hibernate.many-to-one
     *   column="colId"
     *   class="TheManyClass"
     *
     */


Thanks in advance.


/K



-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004 Premiere Conference
on
Open Tools Development and Integration See the breadth of Eclipse
activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
xdoclet-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/xdoclet-user


------------------------------------------------------- The SF.Net email is sponsored by EclipseCon 2004 Premiere Conference on Open Tools Development and Integration See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. http://www.eclipsecon.org/osdn _______________________________________________ xdoclet-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/xdoclet-user




------------------------------------------------------- The SF.Net email is sponsored by EclipseCon 2004 Premiere Conference on Open Tools Development and Integration See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. http://www.eclipsecon.org/osdn _______________________________________________ xdoclet-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/xdoclet-user




------------------------------------------------------- The SF.Net email is sponsored by EclipseCon 2004 Premiere Conference on Open Tools Development and Integration See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. http://www.eclipsecon.org/osdn _______________________________________________ xdoclet-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/xdoclet-user




------------------------------------------------------- The SF.Net email is sponsored by EclipseCon 2004 Premiere Conference on Open Tools Development and Integration See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. http://www.eclipsecon.org/osdn _______________________________________________ xdoclet-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/xdoclet-user




------------------------------------------------------- SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with a free DVD software kit from IBM. Click Now! http://ads.osdn.com/?ad_id56&alloc_id438&op=click _______________________________________________ xdoclet-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/xdoclet-user

Reply via email to