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

Hibernate@ManyToOne仅适用于CascadeType.ALL

皮弘博
2023-03-14
问题内容

我正在使用Hibernate3.3.1,我想在人员和指定公司之间建立关系。他们应该松耦合,但我想安排通过级联创建公司,而不是显式调用saveOrUpdate(newCompany)。

我定义了以下实体:

class Company
{
   @Id
   Long companyId;
   String name;
}

class Person
{
   @Id
   Long personId;
   String name;
   @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE})
   Company company;
}

在我的小岛内,我正在执行以下操作:

testpers.setCompany (newCompany);
session.saveOrUpdate(testpers);

我得到一个例外

org.hibernate.TransientObjectException:对象引用了一个未保存的瞬态实例-
在刷新之前保存该瞬态实例:consearch.model.core.Company

当使用“ cascade = CascadeType.ALL”进行注释时,它可以工作,但是我也不想删除(例如,如果公司被删除,那么该人也不应被删除)

我想知道在事先感谢您之前没有人遇到过这个问题。尚恩


问题答案:

@Cascade使用非JPA Session.saveOrUpdate()方法时,可能需要启用Hibernate自定义。
添加@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)或使用Session.persist()



 类似资料:
  • @没有复合关系的多通关系可以正常工作: 这执行1SQL查询,仅从Telefoni表中获取一行,持续约10ms。 但是,当添加任何带有复合@JoinColumns的@manytone关系时,延迟抓取将停止工作: 这将执行37个SQL查询,急切地获取每个父实体和每个父实体的父实体,直到解决所有关系。这将持续大约600毫秒。 由于向我的实体添加了一个额外的关系,我的性能下降了60倍...除了更改我的数据

  • 我正在开发一个项目,它以前在API23和22上都能很好地工作,然而,当应用程序一启动它就会崩溃(甚至连activity都无法加载)--只在API22上,在API23上它能很好地工作。日志对我没有太大帮助,我已经不知道是什么导致了这个错误的发生。它抱怨的类是清单中定义的App类。下面是一些可能有助于分析的代码: null public class App扩展com.orm.sugarapp{ } 应

  • 我正在使用连接到web服务 这仅适用于AsyncTask。我无法在普通活动上执行上述语句(没有AsyncTask) 这是故意的行为,还是我错过了什么。 顺便提一下,这是我的第一个问题

  • 问题内容: 我看不到“多对一”关系与“一对一”关系的架构有什么区别: 与 有什么区别吗? 问题答案: 它们在架构上看起来完全相同,但是在Hibernate Layer上有所不同。 如果尝试这样的操作: 一切都会好起来的。但是,保存后,如果您尝试获取订单: 当然,在两种情况下,您的Address类应该看起来有所不同。

  • 问题内容: 当我尝试保存顶级实体(使用JPA)时,我是否需要从数据库中重新获取ManyToOne映射实体并进行设置,还是不能仅设置(ManyToOne映射实体的ID并保存顶级实体?)它抛出的实体:org.hibernate.TransientObjectException: 我们正在使用的表结构: (这两个类都具有用于所有字段的setter和getter方法以及默认构造函数,该构造函数以主键作为参

  • 问题内容: 我目前正在阅读有关实体关联的Hibernate文档,但遇到一些困难却难以理解。它在本质上做的区别和联系。尽管我在实际项目中使用了它们,但是我无法完全理解它们之间的差异。据我了解,如果一个表/一个实体与另一个实体有关联,则该关联应来自另一侧。那么,我们应该如何根据具体情况决定选择哪个呢?它又如何影响数据库/查询/结果?到处都有很好的例子吗? PS:我认为这与问题相关,如果有人可以解释关联