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

对方案一的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{}  
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文件

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>  
<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这三个子类进行维护。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值