同时坚持两个实体

时间:2011-09-27 07:21:12

标签: java jsf jpa netbeans

我一直在努力解决这个问题,似乎无法解决问题。我有一个名为SiteVisit的持久化实体,它通过名为SiteVistHasStaff的中间表与Staff相关联。

使用Netbeans,CRUD和JSf我已经能够使用有意义的数据填充这些表(使用三个CRUD页面)并创建显示员工等站点访问的查询。

但是,为了改进用户界面,我尝试创建一个页面,允许预订SiteVisit并选择将参加的工作人员,然后在提交页面/表单时在SiteVist和SiteVisitHasStaff表中创建新记录。

这似乎是一个简单的现实世界任务,但我似乎无法明确我需要采取的步骤来实现它。我已设法将数据放入selectManyMenu中的同一页面,但在尝试提交我的选择时失败并出现持久性错误(创建的站点访问没有员工列表但是StaffVisitHasStaff记录失败,因为SiteVisit没有值id字段)

我可以使用netbeans生成的CRUD创建方法,这种方式感觉就像我重用代码一样正确,但我的想法是否定的,因为他们使用不同的EntityManagers并且似乎并不了解彼此。我是否需要创建一个新的bean(我尝试过这个失败),新的外观处理需求?或者它与我的实体定义有关。

@OneToMany(cascade = CascadeType.ALL, mappedBy = "siteVisitIdsiteVisit")
private List<SiteVisitHasStaFF> siteVisitHasStaffList;

@JoinColumn(name = "site_visit_idsite_visit", referencedColumnName = "idsite_visit")
@ManyToOne(optional = false)
private SiteVisit siteVisitIdsiteVisit;

任何人都可以帮助或指出一个示例的方向,演示如何做到这一点我已经google了,阅读和尝试了很多事情,我只是完全困惑。 感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

嗯,只是在黑暗中拍摄,我对Netbeans / CRUD /那些不是那么坚定,但是你坚持你的实体以及你得到的持久性错误的顺序是什么?

我记得,如果你有两个不同的实体经理,最初他们不知道另一个持有的实体。此外,你必须坚持引用它。

因此,如果一个EM持久存在,实体将仅在其持久化上下文中抵制,直到每个提交(事务结束,刷新,...)。另一个EM不会自动检测实体,这就是merging entities的用途。

不知道什么适用于您的情况,但我会在一个范围内使用一个EM进行所有操作,或者将要使用的实体合并到另一个EM中。