对方案一的hibernate实现,利用hibernate中的父子关系来解决

来源:互联网 发布:js get post 区别 编辑:程序博客网 时间:2024/04/30 11:34
对方案一的hibernate实现,利用hibernate中的父子关系来解决:
java文件
Java代码 复制代码
  1. public class Party {   
  2.     Long partyId;   
  3.     String partyRole;   
  4. }   
  5. public class Person {   
  6.     Long id;   
  7.     Party party;   
  8.     String login;   
  9.     String name;   
  10.     String sex;   
  11.        ......   
  12. }   
  13. public class Department {   
  14.     Long id;   
  15.     Party party;   
  16.     String name;   
  17.     String address;   
  18.     ......   
  19. }   
  20. public abstract class PartyRelationship {   
  21.     Long id;   
  22.     Party partyFrom;   
  23.     Party partyTo;     
  24.     String partyRole;          
  25. }   
  26. public class PersonRelationship extends PartyRelationship{}   
  27. public class DepartmentRelationship extends PartyRelationship{}   
  28. public class PersonDepartment extends PartyRelationship{}  


hbm.xml文件

Java代码 复制代码
  1. <hibernate-mapping package="com.bulain.model">   
  2.     <class name="Party" table="party">   
  3.         <id name="partyId" column="party_id" type="java.lang.Long" >   
  4.             <generator class="native"/>   
  5.         </id>   
  6.         <property name="partyRole" column="party_role" type="java.lang.String"/>   
  7.     </class>   
  8.     <class name="Person" table="person">   
  9.         <id name="id" column="id" unsaved-value="0">    
  10.             <generator class="foreign">    
  11.                 <param name="property">party</param>    
  12.             </generator>    
  13.         </id>    
  14.         <one-to-one name="party" class="Party" cascade="all" constrained="true" />     
  15.         <property name="login" column="login" type="java.lang.String"/>   
  16.         <property name="name" column="name" type="java.lang.String"/>            
  17.         <property name="sex" column="sex" type="java.lang.String"/>   
  18.     </class>   
  19.     <class name="Department" table="department">   
  20.         <id name="id" column="id" unsaved-value="0">    
  21.             <generator class="foreign">    
  22.                 <param name="property">party</param>    
  23.             </generator>    
  24.         </id>    
  25.         <one-to-one name="party" class="Party" cascade="all" constrained="true"/>     
  26.         <property name="name" column="name" type="java.lang.String"/>   
  27.         <property name="address" column="address" type="java.lang.String"/>   
  28.     </class>   
  29.     <class name="PartyRelationship" table="party_relationship" abstract="true">   
  30.         <id name="id" column="id" type="java.lang.Long">   
  31.             <generator class="native"/>   
  32.         </id>   
  33.         <discriminator column="party_role" type="java.lang.String"/>   
  34.         <many-to-one name="partyFrom" column="party_from_id" not-null="true"/>   
  35.         <many-to-one name="partyTo" column="party_to_id" not-null="true"/>   
  36.         <subclass name="PersonRelationship" discriminator-value="per_per">   
  37.             <property name="partyRole" column="party_role" insert="false"  
  38.                 update="false"/>   
  39.         </subclass>   
  40.         <subclass name="PersonDepartment" discriminator-value="per_dept">   
  41.             <property name="partyRole" column="party_role" insert="false"  
  42.                 update="false"/>   
  43.         </subclass>   
  44.         <subclass name="DepartmentRelationship" discriminator-value="dept_dept">   
  45.             <property name="partyRole" column="party_role" insert="false"  
  46.                 update="false"/>   
  47.         </subclass>   
  48.     </class>   
  49. </hibernate-mapping>  

对于这个实现所以关系仍在party_relationship这张表中进行维护,通过PersonRelationship、DepartmentRelationship、PersonDepartment这三个子类进行维护。
原创粉丝点击