一对一主键单向关联

SQL:car_pk_single表的主键为engine_pk_single表主键的外键

create table car_pk_single (
id number(10,0) not null,
name varchar2(15),
serial varchar2(30),
manufacturer varchar2(50),
producedate date,
primary key (id)
);
create table engine_pk_single (
id number(10,0) not null,
model varchar2(20),
manufacturer varchar2(50),
producedate date,
primary key (id)
);
alter table car_pk_single
add constraint fk_car_engine_pk_single
foreign key (id)
references engine_pk_single(id);

POJO:Engine类和Car类都有对方的一个引用(以下为省略写法)

public class Car implements Serializable
{
private Engine engine;
}
public class Engine implements Serializable
{
//这里没有属性Car
... ...
}



XML: Car.hbm.xml Engine.hbm.xml(以下为省略写法)

<hibernate-mapping package="com.allanlxf.hibernate.association.o2o.entity">
<class name="Car" table="car_pk_single" >
<id name="id" column="id" type="integer">
<generator class="foreign">
<param name="property">engine</param>
</generator>
</id>
<one-to-one name="engine" class="Engine" constrained="true" />
</class>
</hibernate-mapping>

<hibernate-mapping package="com.allanlxf.hibernate.association.o2o.entity">
<class name="Engine" table="engine_pk_single" >
<id name="id" column="id" type="integer">
<generator class="native"></generator>
</id>
</class>
</hibernate-mapping>



a) car.setEngine(engine);
session.save(car);
程序将先保存engine到数据库,然后再保存car

b) session.get(Car.class, id),打印sql如下:

select
car0_.id as id0_0_,
car0_.name as name0_0_,
car0_.serial as serial0_0_,
car0_.manufacturer as manufact4_0_0_,
car0_.producedate as produced5_0_0_
from
car_pk_single car0_
where
car0_.id=?


c) 在car.hbm.xml的one-to-one元素中添加outer-join="true", 能得到一个内连接sql。
d) session.delete(car),将只删除car,而不删除engine。
e) 在car.hbm.xml的one-to-one元素中添加cascade="all" ,再执行session.delete(car),则能级联删除engine

one-to-one主键单向关联映射总结: 需对有外键一方的xml文件设置constrained="true"。
若操作涉及到映射关系双方的数据,以操作有外键一方的对象为主(在有级联的情况下);
若操作只涉及到有外键的一方,则只操作这一方对象即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值