繁体   English   中英

同时存在两个实体

[英]Persisting two entities at the same time

我已经为此苦苦挣扎了一段时间,似乎无法解决这个问题。 我有一个名为SiteVisit的持久性实体,该实体通过称为SiteVistHasStaff的中间表与Staff有很多关系。

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

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

这似乎是一个简单的现实世界任务,但是我似乎无法弄清实现该任务所需采取的步骤。 我设法将数据保存到selectManyMenu的同一页面上,但随后在尝试提交我的选择时失败并出现持久性错误(创建的站点访问没有工作人员列表,但是StaffVisitHasStaff记录失败,因为SiteVisit没有值id字段)

我可以使用netbeans生成的CRUD创建方法吗,当我重用代码时,这种感觉就像是正确的方式,但是我的想法是不,因为它们使用不同的EntityManager,并且彼此之间似乎并不了解。 我是否需要使用满足要求的新外观创建一个新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中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM