快速业务通道

eclipse + JBoss 5 + EJB3开发指南(7) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
JB3开发指南(7)(3) 时间:2011-09-18 blogjava 哈佛校训

Referee类使用了customer属性映射了Customer对象,实际上,这是一个双向的one-to-one映射。这时 ,在Referee类的customer属性的getter方法的@OneToOne注释中,需要使用mappedBy属性来指定主表 (Customer)中的映射从表的属性名(referee)。

我们可以使用下面的代码进行测试:

System.out.println(em.find(Referee.class, 1).getCustomer().getName()); Customer customer = new Customer(); customer.setName("微软"); Referee referee = new Referee(); referee.setName("赵军"); em.persist(referee); customer.setReferee(referee); em.persist(customer);

如果要覆盖默认的名键名,例如,外键名为referee1_id,可以两种方法使EJB3容器使用新的外键:

1.  修改Customer类中的referee属性的getter和setter方法为getReferee1和setReferee1,并将 Referee类中mappedBy属性的值修改成referee1。

2.  使用@JoinColumn注释设置新的外键名,这种方法只需要修改Customer类的getReferee方法上面 注释即可,代码如下:

@OneToOne @JoinColumn(name="referee1_id") public Referee getReferee() {     return referee; }

one-to-one关系还可以共享主键,也就是一个表的主键的值依赖于另一个表的主键的值。因此,在这 种情况下,就不再需要t_customers表中的referee_id字段了。由于t_referees表的id字段值依赖于 t_customers表的id字段值,因此,需要将t_referees表中的id字段值的自增类型去掉。

在EJB3中使用@PrimaryKeyJoinColumn注释来实现主键的共享。首先需要修改Customer类的getReferee 方法上方的注释,修改后的代码如下:

@OneToOne(cascade=CascadeType.ALL) @PrimaryKeyJoinColumn public Referee getReferee() {     return referee; }

然后要修改Referee类中的getCustomer和getId方法上方的注释,修改后的代码如下:

@OneToOne @PrimaryKeyJoinColumn public Customer getCustomer() {     return customer; } @Id @GeneratedValue(generator = "pkGenerator") @GenericGenerator(name = "pkGenerator", strategy = "foreign",    parameters = @Parameter(name = "property", value = "customer")) public int getId() {     return id; }

其中@GenericGenerator注释表示这个id属性是外键,并且依赖于customer属性对应的实体Bean的id属 性值(主键值)。

另外还要注意一点,由于t_referees表的id的自增类型已经去掉,而且该值依赖于t_customers表的id 字段值,因此,就不能直接持久化Referee对象了,而在持久化Customer对象的同时,EJB3容器会自动将 Referee持久化的。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号