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

Reply via email to