我已经为此挣扎了一段时间,似乎无法克服这个问题。我有一个名为SiteVisit的持久实体,它通过一个名为SiteVistHasStaff的中间表与Staff多对多相关。
使用Netbeans、CRUD和JSf,我已经能够用有意义的数据填充这些表(使用三个CRUD页面),并创建查询,显示员工的站点访问等。
然而,为了改进用户界面,我正在尝试创建一个页面,允许预订SiteVisit并选择将参加的人员,然后在提交页面/表单时在SiteVist和SiteVisitHasStaff表中创建新记录。
这似乎是一个简单的现实世界的任务,但我似乎不能得到明确的步骤,我需要采取实现它。我已经设法在selectManyMenu中获得数据到同一页面上,但在尝试提交我的选择时,持久性错误失败(站点访问是在没有人员列表的情况下创建的,但StaffVisitHasStaff记录失败,因为SiteVisit id字段没有值)
我可以使用netbeans生成的CRUD创建方法吗?当我重用代码时,这感觉有点像正确的方法,但我的想法是不,因为它们使用不同的entitymanager并且似乎不了解彼此。我是否需要用处理需求的新facade创建一个新的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;
有人可以帮助或指出我在一个例子的方向,演示如何做到这一点,我已经谷歌,阅读和尝试了这么多的事情,我只是完全困惑。谢谢你提供的任何帮助
好吧,只是在黑暗中拍摄,我不是Netbeans/CRUD/什么的坚定,但你是按照什么顺序持久化你的实体,你到底得到了哪个持久化错误?
我记得,如果你有两个不同的实体管理器,最初它们不知道实体被另一个持久化。另外,你必须持久化一些东西来引用它。
因此,如果一个EM正在持久化某些内容,则实体将仅在其持久化上下文中进行抵抗,直到所有内容都提交(事务结束,刷新,…)。另一个EM不会自动检测实体,这就是合并实体的作用。
我不知道什么会适用于你的情况,但我会在一个范围内使用一个EM进行所有操作,或者将你想要使用的实体合并到另一个EM中。