Hibernate OneToOne关联
2016-05-15 14:34
525 查看
单向-共享主键
双向-共享主键
不共享主键只要将@PrimarKeyJoinColumn改为@JoinColumn,并各自指定生成策略即可。
通过将@JoinColumn改为@JoinTable,可以使用关联表进行关联。
//Address不包含任何到User的信息 //使用optional=false,确定addr非空,这样hibernate不用检查addr是否为空,才能使用懒加载 //使用@PrimaryKeyJoinColumn使用Address的主键作为User的外键以及主键 //添加时需要先添加Address再添加User,并手动设置user.setId(addr.getId()) @Entity class User{ //不指定生成策略 @Id private long id; @OneToOne( fetch = FetchType.LAZY, optional = false) @PrimaryKeyJoinColumn private Address addr; } //表结构 | user |address| |id<pk><fk_from_address_id>|id|
双向-共享主键
@Entity class User{ @Id @GeneratedValue(generator = "addressKeyGenerator") @org.hibernate.annotations.GenericGenerator( name = "addressKeyGenerator", strategy = "foreign", parameters = @org.hibernate.annotations.Parameter( name = "property", value = "addr" ) ) private long id; @OneToOne( fetch = FetchType.LAZY, optional = false) @PrimaryKeyJoinColumn private Address addr; } @Entity class Address{ @Id @GeneratedValue private long id; @OneToOne( mappedBy = "addr", cascade = CascadeType.PERSIST) private User user; } //表结构 | user |address| |id<pk><fk_from_address_id>|id|
不共享主键只要将@PrimarKeyJoinColumn改为@JoinColumn,并各自指定生成策略即可。
表结构 | user |address| | id | id | |a_id<fk>| - |
通过将@JoinColumn改为@JoinTable,可以使用关联表进行关联。
@Entity public class Shipment { @OneToOne(fetch = FetchType.LAZY) @JoinTable( name = "ITEM_SHIPMENT", joinColumns = @JoinColumn(name = "SHIPMENT_ID"), inverseJoinColumns = @JoinColumn( name = "ITEM_ID", nullable = false, unique = true) ) protected Item auction; // ... }
相关文章推荐
- AdapterViewFlipper使用案例
- 引擎大全
- 多态
- 数据库设计原则(转载)
- Error:Cause: failed to find target : Open Android SDK Manager和SDK对应的API
- 文章标题
- 蓝桥杯:Anagrams问题
- 制作系统镜像文件
- 搜索一·24点---dfs
- Intent
- 案例-表的使用
- Metal 着色语言编程指南 二十
- React Native从入门到放弃
- [经验技巧] Android移植中部分重要lib库文件作用
- 算法-快速排序
- PC常用的快捷键
- android中的广播
- Android中XML的三种解析方式
- Poj 2186 Popular Cows
- redis之Hiredis C编程