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:

<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:

<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

<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

<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、付费专栏及课程。

余额充值