hibernate 一对一的外键关联

一对一的外键关联:
不共享主键,而是两表可以有一个外键关系。一张表有着引用被关联表的主键的一个外键列。
  1. <classname="User"table="USER"dynamic-insert="true"dynamic-update="true"
  2. mutable="false">
  3. <id name="userId"column="USER_ID"type="integer">
  4. <generatorclass="native"/>
  5. </id>
  6. <property name="userName"type="string"column="user_Name"/>
  7. <!-- 在User里面添加维护信息,也就是把User作为维护端 -->
  8. <many-to-one name="address"class="Address"
  9. column="ADDRESS_ID"unique="true"cascade="save-update"/>

(这里用的many-to-one,而不是我们共享主键里面的one-to-one,因为:你不在乎关联的目标端是什么,
因此可以像对待没有多端的対一关联对待他。通过unique来强制说明只存在一的对应关系)
反向属性引用:
  1. <classname="Address"table="ADDRESS">
  2. <id name="addressId"column="ADDRESS_ID"type="integer">
  3. <generatorclass="native">
  4. </generator>
  5. </id>
  6. <property name="street"type="string"column="street"/>
  7. <property name="city"type="string"column="city"/>
  8. <!-- property-ref="address"告诉hibernateAddress -->
  9. <!-- 基于外键的的唯一约束,一般不建议这么做,这个是不需要的 -->
  10. <one-to-one name="user"class="User"property-ref="address"/>

插入:
  1. Address address =newAddress("street","city");
  2. user.setAddress(address);
  3. //不需要
  4. address.setUser(user);
  5. Integer msgId = (Integer) session.save(user);




通过注解映射外键:
JPA映射注解也支持基于外键列的实体之间的一对一关系。与前面的非实体类型的区别就是,@JoinColumn替代了
  1. @PrimaryKeyJoinColumn.
  2. @Entity
  3. publicclassUserimplementsSerializable {
  4. @Id
  5. @GeneratedValue
  6. privateInteger userId;
  7. @Column(name="USER_NAME",length=100)
  8. privateString userName;
  9. @OneToOne(cascade=CascadeType.PERSIST)
  10. //加入一个外键关联字段
  11. @JoinColumn(name="ADDRESS_ID")
  12. privateAddress address

如果需要双向的:
  1. @Entity
  2. publicclassAddressimplementsSerializable {
  3. @Id
  4. @GeneratedValue
  5. @Column(name="ADDRESS_ID")
  6. privateInteger addressId;
  7. privateString street;
  8. privateString city;
  9. //如果需要双向的
  10. //表示被User里面的address字段进行关联管理
  11. //mappedBy相当于xml的property-ref="address"(关联的一个简单的方向声明,就是在目标实体段指定了一种属性)
  12. //加上他,在数据库上是没有任何影响的,紧紧是告诉JPA容器一种关系
  13. @OneToOne(mappedBy="address")
  14. privateUser user;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值