注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Javado做Java

学习的点点滴滴http://blog.csdn.net/guorujian

 
 
 

日志

 
 
关于我

东北人! 狮子的獠牙、光速拳! 我很佩服163的办事认真,故乡一栏竟然能精确到乡,而且我们乡合并才不久。厉害!永远支持网易!

网易考拉推荐

Hibernate Annotation with @OneToOne  

2008-02-19 16:56:09|  分类: 收藏篇 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这阵子试了一下Hibernate Annotation的功能,发现还蛮好用的。

不過在設定one-to-one bidirectional relation時,發現照官方文件的設法會失效,導致one-to-one relation的pojo在做資料insert的動作時出現異常。 不过在设定one-to-one bidirectional relation时,发现照官方文件的设法会失效,导致one-to-one relation的pojo在做资料insert的动作时出现异常。

這個問題會發生在one-to-one的兩個table是共享相同主鍵(share the same primary keys values)時,解決方式可以參照下列範列。 这个问题会发生在one-to-one的两个table是共享相同主键(share the same primary keys values)时,解决方式可以参照下列范列。

ExEmp對應ExSalary是one-to-one relation,二者共享相同主鍵。 ExEmp对应ExSalary是one-to-one relation,二者共享相同主键。 ExEmp為"父"的角色,ExSalary為"子"的角色。 ExEmp为"父"的角色,ExSalary为"子"的角色。



 
@Entity  @Table(name = "EX_EMP", schema="SCOTT")  public class ExEmp implements java.io.Serializable {       @Id    @Column(name = "EMP_ID", unique = true, nullable = false)    private String empId;       @Column(name = "EMP_NAME")    private String empName;       @OneToOne(cascade = CascadeType.ALL)     @PrimaryKeyJoinColumn    private ExSalary exSalary;       public ExEmp() {    }        ...etc   }
 
@Entity  @Table(name = "EX_SALARY", schema = "SCOTT")  public class ExSalary implements java.io.Serializable {       @Id    @Column(name = "EMP_ID", unique = true, nullable = false)      @GeneratedValue(generator = "foreign")    @GenericGenerator(name = "foreign", strategy = "foreign",
parameters = { @Parameter(name = "property", value = "exEmp") })   private String empId;     @OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH} ,
mappedBy="exSalary")   private ExEmp exEmp;     @Column(name = "EMP_SALARY")   private BigDecimal empSalary;     public ExSalary() {   } ...etc }

解决问题的关键点就是上述Sample Code里面红字所示那段程式码。

也就是说,在把紅字所示那段程式碼拿掉後,就算你在ExEmp class裡面設定了@PrimaryKeyJoinColumn,而且ExSalary class裡也確實的指定了@OneToOne的設置,ExSalary class的資料在"新增"到DB時還是會出現它無法找到Id值的狀況。也就是说,在把红字所示那段程式码拿掉后,就算你在ExEmp class里面设定了@PrimaryKeyJoinColumn,而且ExSalary class里也确实的指定了@OneToOne的设置,ExSalary class的资料在"新增"到DB时还是会出现它无法找到Id值的状况。

转自:http://www.javaworld.com.tw/jute/post/view?bid=54&id=205471&sty=3

  评论这张
 
阅读(985)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017