对方案一的hibernate实现,利用hibernate中的父子关系来解决:
java文件
hbm.xml文件
对于这个实现所以关系仍在party_relationship这张表中进行维护,通过PersonRelationship、DepartmentRelationship、PersonDepartment这三个子类进行维护。
java文件
- public class Party {
- Long partyId;
- String partyRole;
- }
- public class Person {
- Long id;
- Party party;
- String login;
- String name;
- String sex;
- ......
- }
- public class Department {
- Long id;
- Party party;
- String name;
- String address;
- ......
- }
- public abstract class PartyRelationship {
- Long id;
- Party partyFrom;
- Party partyTo;
- String partyRole;
- }
- public class PersonRelationship extends PartyRelationship{}
- public class DepartmentRelationship extends PartyRelationship{}
- public class PersonDepartment extends PartyRelationship{}
public class Party {
Long partyId;
String partyRole;
}
public class Person {
Long id;
Party party;
String login;
String name;
String sex;
......
}
public class Department {
Long id;
Party party;
String name;
String address;
......
}
public abstract class PartyRelationship {
Long id;
Party partyFrom;
Party partyTo;
String partyRole;
}
public class PersonRelationship extends PartyRelationship{}
public class DepartmentRelationship extends PartyRelationship{}
public class PersonDepartment extends PartyRelationship{}
hbm.xml文件
- <hibernate-mapping package="com.bulain.model">
- <class name="Party" table="party">
- <id name="partyId" column="party_id" type="java.lang.Long" >
- <generator class="native"/>
- </id>
- <property name="partyRole" column="party_role" type="java.lang.String"/>
- </class>
- <class name="Person" table="person">
- <id name="id" column="id" unsaved-value="0">
- <generator class="foreign">
- <param name="property">party</param>
- </generator>
- </id>
- <one-to-one name="party" class="Party" cascade="all" constrained="true" />
- <property name="login" column="login" type="java.lang.String"/>
- <property name="name" column="name" type="java.lang.String"/>
- <property name="sex" column="sex" type="java.lang.String"/>
- </class>
- <class name="Department" table="department">
- <id name="id" column="id" unsaved-value="0">
- <generator class="foreign">
- <param name="property">party</param>
- </generator>
- </id>
- <one-to-one name="party" class="Party" cascade="all" constrained="true"/>
- <property name="name" column="name" type="java.lang.String"/>
- <property name="address" column="address" type="java.lang.String"/>
- </class>
- <class name="PartyRelationship" table="party_relationship" abstract="true">
- <id name="id" column="id" type="java.lang.Long">
- <generator class="native"/>
- </id>
- <discriminator column="party_role" type="java.lang.String"/>
- <many-to-one name="partyFrom" column="party_from_id" not-null="true"/>
- <many-to-one name="partyTo" column="party_to_id" not-null="true"/>
- <subclass name="PersonRelationship" discriminator-value="per_per">
- <property name="partyRole" column="party_role" insert="false"
- update="false"/>
- </subclass>
- <subclass name="PersonDepartment" discriminator-value="per_dept">
- <property name="partyRole" column="party_role" insert="false"
- update="false"/>
- </subclass>
- <subclass name="DepartmentRelationship" discriminator-value="dept_dept">
- <property name="partyRole" column="party_role" insert="false"
- update="false"/>
- </subclass>
- </class>
- </hibernate-mapping>
<hibernate-mapping package="com.bulain.model">
<class name="Party" table="party">
<id name="partyId" column="party_id" type="java.lang.Long" >
<generator class="native"/>
</id>
<property name="partyRole" column="party_role" type="java.lang.String"/>
</class>
<class name="Person" table="person">
<id name="id" column="id" unsaved-value="0">
<generator class="foreign">
<param name="property">party</param>
</generator>
</id>
<one-to-one name="party" class="Party" cascade="all" constrained="true" />
<property name="login" column="login" type="java.lang.String"/>
<property name="name" column="name" type="java.lang.String"/>
<property name="sex" column="sex" type="java.lang.String"/>
</class>
<class name="Department" table="department">
<id name="id" column="id" unsaved-value="0">
<generator class="foreign">
<param name="property">party</param>
</generator>
</id>
<one-to-one name="party" class="Party" cascade="all" constrained="true"/>
<property name="name" column="name" type="java.lang.String"/>
<property name="address" column="address" type="java.lang.String"/>
</class>
<class name="PartyRelationship" table="party_relationship" abstract="true">
<id name="id" column="id" type="java.lang.Long">
<generator class="native"/>
</id>
<discriminator column="party_role" type="java.lang.String"/>
<many-to-one name="partyFrom" column="party_from_id" not-null="true"/>
<many-to-one name="partyTo" column="party_to_id" not-null="true"/>
<subclass name="PersonRelationship" discriminator-value="per_per">
<property name="partyRole" column="party_role" insert="false"
update="false"/>
</subclass>
<subclass name="PersonDepartment" discriminator-value="per_dept">
<property name="partyRole" column="party_role" insert="false"
update="false"/>
</subclass>
<subclass name="DepartmentRelationship" discriminator-value="dept_dept">
<property name="partyRole" column="party_role" insert="false"
update="false"/>
</subclass>
</class>
</hibernate-mapping>
对于这个实现所以关系仍在party_relationship这张表中进行维护,通过PersonRelationship、DepartmentRelationship、PersonDepartment这三个子类进行维护。