Hibernate中的对象one-to-one关系

(1) 通过主健参考,限制2个数据表中的主健使用相同的值

create table CUSTOMER(
ID bigint not null auto_increment,
NAME varchar(15),
primary key (ID)
);

create table ADDRESS(
ID bigint not null auto_increment,
STREET varchar(128),
CITY varchar(128),
PROVINCE varchar(128),
primary key (ID)
);

Customer.hbm.xml:

Java代码 复制代码
  1. <id name="Id" type="java.lang.Long" column="ID">   
  2.     <generator class="native"/>   
  3. </id>   
  4.   
  5. <one-to-one name="address"    
  6.             class="Address"    
  7.             cascade="all"/>  
<id name="Id" type="java.lang.Long" column="ID">
	<generator class="native"/>
</id>

<one-to-one name="address" 
            class="Address" 
            cascade="all"/>


Address.hbm.xml:

Java代码 复制代码
  1. <id name="Id" type="java.lang.Long"  column="ID">   
  2.      <generator class="foreign">    
  3.               <param name="property">customer</param>    
  4.           </generator>    
  5. </id>   
  6.   
  7. <one-to-one name="customer"    
  8.             class="Customer"    
  9.             constrained="true"  
  10.             outer-join="false"/> <!--通过一个外键引用对主键进行约束-->  
<id name="Id" type="java.lang.Long"	column="ID">
	 <generator class="foreign"> 
              <param name="property">customer</param> 
          </generator> 
</id>

<one-to-one name="customer" 
            class="Customer" 
            constrained="true"
            outer-join="false"/> <!--通过一个外键引用对主键进行约束-->


Customer cus = new Customer();
cus.setName("logcd");
Address add = new Address();
add.setCity("成都");
add.setProvince("四川");
add.setCustomer(cus);
cus.setAddress(add);
customerDao.save(cus);

(2)把many-to-one设置unique="true",则这时候的many-to-one实质上就是one-to-one

create table ADDRESS(
ID bigint not null auto_increment,
STREET varchar(128),
CITY varchar(128),
PROVINCE varchar(128),
primary key (ID)
);

create table CUSTOMER(
ID bigint not null auto_increment,
NAME varchar(15),
ADDRESS_ID bigint,
foreign key (ADDRESS_ID) references ADDRESS(ID),  
primary key (ID)
);

Customer.hbm.xml

Java代码 复制代码
  1. <id   
  2.     name="Id"  
  3.     type="java.lang.Long"  
  4.     column="ID"  
  5.     >   
  6.     <generator class="native"/>   
  7. </id>   
  8.   
  9. <many-to-one   
  10.     name="Address"  
  11.     class="Address"  
  12.     cascade="all"  
  13.     unique="true"  
  14.     >   
  15.     <column name="ADDRESS_ID"/>   
  16. </many-to-one>  
<id
	name="Id"
	type="java.lang.Long"
	column="ID"
	>
	<generator class="native"/>
</id>

<many-to-one
	name="Address"
	class="Address"
	cascade="all"
	unique="true"
	>
	<column name="ADDRESS_ID"/>
</many-to-one>


Address.hbm.xml

Java代码 复制代码
  1. <id   
  2.     name="Id"  
  3.     type="java.lang.Long"  
  4.     column="ID"  
  5.     >   
  6.     <generator class="native"/>   
  7. </id>   
  8.   
  9. <one-to-one   
  10.     class="Customer"  
  11.     name="customer"  
  12.     property-ref="Address"  
  13. />  
<id
	name="Id"
	type="java.lang.Long"
	column="ID"
	>
	<generator class="native"/>
</id>

<one-to-one
	class="Customer"
	name="customer"
	property-ref="Address"
/>


Customer cus = new Customer();
cus.setName("jinming");
Address add = new Address();//如果是查询出来,unique="true",没作用???
add.setCity("chengdu");
add.setProvince("sichuan");
add.setCustomer(cus);
cus.setAddress(add);
customerDao.save(cus);

说明:hibernate的unique是给生成DDL的时候使用,所以需要检查下数据库的schema,那里加了unique约束才是有效的
MySQL:alter table your_table add unique (column_name)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值