hibernate关联映射中将类属性提出来作为组件class复用

sql脚本:

--创建表
create table Person4 ( personId number(10) not null primary key ,personName NVARCHAR2(100));  
create table PersonAddress4 ( personId4 number(10) not null, addressId4 number(10) not null,primary key
(personId4, addressId4));
create table Address4 ( addressId number(10) not null primary key,addressName NVARCHAR2(100));

address.java:

public class Address implements Serializable
{
    /**
     * 
     */
    private static final long serialVersionUID = -2468384878011374291L;

    private int id;

    private PojoName pojoName;

    private Set<Person> persones = new HashSet<Person>();

    setter/getter略

    
}

address.hbm.xml:
<class name="com.chenjun.eshop.staffManage.domain.Address"
		table="Address4">

		<id name="id" column="addressId"><!-- addressid引用的是person表的主键personid,也就是两表共用主键 -->

			<generator class="assigned"><!-- 由程序分配主键 -->

			</generator>
		</id>
		
		<component name="pojoName"
			class="com.chenjun.eshop.staffManage.domain.PojoName"><!-- 将公用的属性提出来作为一个组件class,多个实体就可以复用这个组件class -->
			
			<property name="addressName"></property>  <!-- addressName 的值取自上面组件类的addressName值 -->
		</component>
		<set name="persones" inverse="true" table="PersonAddress4"
			cascade="all">
			<key column="addressId4" />
			<many-to-many column="personId4"
				class="com.chenjun.eshop.staffManage.domain.Person" />
		</set>
	</class>

person.java:

public class Person implements Serializable
{
    /**
     * 
     */
    private static final long serialVersionUID = 3746536169441688518L;

    private int id;

    private PojoName pojoName;

    private Set<Address> addresses = new HashSet<Address>();

    setter/gettter略
   

}

person.hbm.xml:
<class name="com.chenjun.eshop.staffManage.domain.Person"
		table="Person4">

		<id name="id" column="personId">
			<generator class="assigned"><!-- 由程序分配主键 -->

			</generator>
		</id>

		<component name="pojoName" 
			class="com.chenjun.eshop.staffManage.domain.PojoName">
			<property name="personName"></property>  <!-- personName 的值取自上面组件类的personName值 -->
		</component>

		<!--  personId4,addressId4都是连接表PersonAddress4里的字段-->
		<set name="addresses" table="PersonAddress4" cascade="all">
			<key column="personId4" />
			<!-- unique="true" 表示当前实体是一方,不是多方,也就是person是一 -->
			<many-to-many column="addressId4"
				class="com.chenjun.eshop.staffManage.domain.Address" />
		</set>

	</class>

测试代码:

 private void addPerson()
    {
        PojoName pojoName = new PojoName();
        pojoName.setPersonName("张三");
        pojoName.setAddressName("武汉");// 初始化组件

        Person person1 = new Person();
        person1.setId(21);
        person1.setPojoName(pojoName);// 复用组件,从组件中取apersonName值

        PojoName pojoName2 = new PojoName();
        pojoName2.setPersonName("李四");
        pojoName2.setAddressName("北京");// 初始化组件

        Person person2 = new Person();
        person2.setId(22);
        person2.setPojoName(pojoName2);// 复用组件,从组件中取personName值

        Address address1 = new Address();
        address1.setId(22001);
        address1.setPojoName(pojoName);// 复用组件,从组件中取addressName值

        Address address2 = new Address();
        address2.setId(22002);
        address2.setPojoName(pojoName2);// 复用组件,从组件中取addressName值

        person1.getAddresses().add(address1);
        person1.getAddresses().add(address2);
        person2.getAddresses().add(address1);
        person2.getAddresses().add(address2);

        address1.getPersones().add(person1);// 添加关联表数据
        address1.getPersones().add(person2);
        address2.getPersones().add(person1);
        address2.getPersones().add(person2);

        Session session = this.getHibernateTemplate().getSessionFactory().openSession();
        session.beginTransaction();

        session.save(address1);
        session.save(address2);

        session.beginTransaction().commit();
        session.close();
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值