create table tgroup (
group_id int not null auto_increment,
name varchar(16) not null default '',
primary key (group_id)
) type=innodb;
create table trole (
role_id int not null auto_increment,
name varchar(16) not null default '',
primary key (role_id)
) type=innodb;
create table tgroup_role (
group_id int not null,
role_id int not null,
primary key(group_id, role_id),
index (group_id),
foreign key (group_id) references tgroup(group_id),
index (role_id),
foreign key (role_id) references trole(role_id)
) type=innodb;
package ivan.hibernate.many2many;
public class Group {
private int id;
private String name;
private Set roles = new HashSet();
...
}
Group.hbm.xml
<hibernate-mapping> <class name="ivan.hibernate.many2many.Group" table="tgroup"> <id name="id" column="group_id" unsaved-value="0"> <generator class="increment"/> </id> <property name="name" type="string"/> <set name="roles" table="tgroup_role" cascade="save-update"> <key column="group_id"/> <many-to-many class="ivan.hibernate.many2many.Role" column="role_id"/> </set> </class> </hibernate-mapping>
package ivan.hibernate.many2many; public class Role { private int id; private String name; private Set groups = new HashSet(); ... }
Role.hbm.xml:
<hibernate-mapping>
<class name="ivan.hibernate.many2many.Role" table="trole">
<id name="id" column="role_id" unsaved-value="0">
<generator class="increment"/>
</id>
<property name="name" type="string"/>
<set name="groups" table="tgroup_role" inverse="true" cascade="save-update">
<key column="role_id"/>
<many-to-many class="ivan.hibernate.many2many.Group" column="group_id"/>
</set>
</class>
</hibernate-mapping>