当前位置: 首页 > 面试题库 >

合并@ManyToOne方面的托管实体

邹俊豪
2023-03-14
问题内容

下面给出从Department到的一对多关系Employee

部门(家长):

@OneToMany(mappedBy = "department", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Employee> employeeList = new ArrayList<Employee>(0);

员工(孩子):

@JoinColumn(name = "department_id", referencedColumnName = "department_id")
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
private Department department;

合并如下所示的托管实体(子实体)(在EJB中使用CMT),

Employee employee = entityManager.find(Employee.class, 1L);
employee.setDepartment(department); // department is supplied by a client.
employee.setEmployeeName("xyz");
entityManager.merge(employee);

不会更新数据库表中的相应员工行。仅当CascadeType.MERGE从中的子@ManyToOne关系中删除时,才会发生这种情况Employee

为什么表中的行没有更新?CascadeType.MERGE关于此示例的唯一目的是什么?

我当前正在使用具有JPA 2.1的EclipseLink 2.6.0。


问题答案:

级联应该始终从父级传播到子级,而不是相反。

在您的情况下,您需要从子级移除级联:

@JoinColumn(name = "department_id", referencedColumnName = "department_id")
@ManyToOne(fetch = FetchType.LAZY)
private Department department;

并确保设置了关联的两面:

Employee employee = entityManager.find(Employee.class, 1L);
employee.setDepartment(department);
employee.setEmployeeName("xyz");
department.getEmployeeList().add(employee);
entityManager.merge(department);


 类似资料:
  • 如果不想设立自己的 Git 服务器,你可以选择将你的 Git 项目托管到一个外部专业的托管网站。 这带来了一些好处:一个托管网站可以用来快速建立并开始项目,且无需进行服务器维护和监控工作。 即使你在内部设立并且运行了自己的服务器,你仍然可以把你的开源代码托管在公共托管网站 - 这通常更有助于开源社区来发现和帮助你。 现在,有非常多的托管供你选择,每个选择都有不同的优缺点。 欲查看最新列表,请浏览

  • 日安 我不是一个专业的程序员,我没有正式学习,我目前正在自学。所以我的问题可能看起来很愚蠢,或者不明白答案。请原谅我。 好的,问题来了: 我的例子将是一个内部团队午餐花名册,这将是当地的页面,用户可以设置午餐时间,不会改变,但会在一天结束时重置。 可以通过打开页面来查看所有更改。 我想知道应该是java和html,还是应该用什么语言创建这样的页面。 诚挚的问候

  • 托管 本页告诉你如何在自己的服务器上托管 .crx文件。如果你仅仅通过Chrome Web Store发布扩展,应用,或者主题那么你不需要本页。取而代之的是查阅Chrome Web Store帮助和开发者文档。 注意:如果你已经把扩展发布到扩展库,扩展就会合并到Chrome Web Store里。 按照惯例, 无论是Chrome Web Store还是特定服务器所提供的扩展, 可安装的web ap

  • 我有一个java代码,我正在更新staff实体。我正在使用应用程序管理的实体管理器。我在登录页面中有一个条件,如果用户提供了正确的用户名/密码,他的上次登录时间将被更新。 但是更新没有发生,我得到一个实体已被分离的异常。请参阅下面的代码:- staffDAOImpl.java:- 在StaffServiceImpl.java类中,您将看到我通过调用“StaffDAO.findUnique(logi

  • 本文向大家介绍oracle列合并的实现方法,包括了oracle列合并的实现方法的使用技巧和注意事项,需要的朋友参考一下 很多场合我们都会用到oracle的列合并,oracle提供了如下一些方法用来实现列合并: 一、Oracle 10G以前使用WMSYS.WM_CONCAT: wmsys.wm_concat将字段的值用","来隔开。 二、使用sys_connect_by_path sys_conne

  • 本文向大家介绍java实现mp3合并的方法,包括了java实现mp3合并的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java实现mp3合并的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Java程序设计有所帮助。