Hibernate OneToOne关联
2016-06-10 13:15
295 查看
单向-共享主键
双向-共享主键
不共享主键只要将@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; // ... }
相关文章推荐
- 35 windows_35_Thread_Tls 线程局部存储
- ios UI常用类和类与类之间的关系
- 设计模式----单例模式
- OneToMany/ManyToOne关联
- ACM:蓝桥杯:日期计算(闰年判断方法)
- JUnit4学习总结
- Hibernate映射集合(JDK以及嵌入式值类)
- 最全的Git操作要点大总结(从零开始)
- hibernate级联删除错误
- 34 windows_34_Thread_Base 线程基础
- 我写的一些前端开源项目(均托管到github)
- progress进度条
- Python
- HIbernate继承映射策略
- 33 windows_33_Proc_windows_job 进程,windows作业
- 团队二阶段冲刺个人工作总结8
- Android中的线程池ThreadPoolExecutor
- Java读取和写入文件
- 客户端禁用cookie,怎样实现session共享多个页面
- 32 windows_32_ProcUse 进程使用