Tag: hibernate cascade

Hibernate OnDelete Cascade不适用于MySql,但适用于postgres和Ms-Sql

我有两个实体。 使用Post-> Thread的 OnetoOne映射的线程实体和Post实体。 Thread实体包含许多post 。 我知道我应该使用OnetoMany而不是OnetoOne,但为了避免所有收集问题我正在使用OnetoOne 现在的问题是,当我删除一个线程时 ,所有与之关联的post也必须被删除。 我成功地使用了它 @OnDelete(action = OnDeleteAction.CASCADE) 但它仅适用于Postgres和Ms-SQl,但不适用于MySql(也尝试过InnoDb)。 在模式生成查询中不生成on delete cascade 。 以下是代码 //Thread Entity @Id @GeneratedValue @Column(name = “thread_id”) private int ThreadID; //Post Entity @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = “post_id”) private int PostID; @OneToOne() @OnDelete(action = OnDeleteAction.CASCADE) private thread ThreadID; 我使用以下查询从Thread实体中删除项目时出现以下错误 session.delete(session.load(thread.class,1)); 2014年9月2日下午8:33:51 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions WARN:SQL错误:1451,SQLState:23000 Sep […]

在更新分离的对象时,Hibernate可以删除孤立的集合吗?

我知道删除孤立的子对象是一个常见的问题,对于刚接触Hibernate的人来说是一个常见的问题,而且相当标准的答案是确保你有一些变化的cascade=all,delete-orphan或cascade=all-delete-orphan上的cascade=all-delete-orphan 。 我希望能够让Hibernate检测到子集合已从父对象中清空/删除,并在更新父对象时从子数据库中删除子表中的行。 例如: Parent parent = session.get(…); parent.getChildren().clear(); session.update(parent); 我Parent类的当前映射如下所示: 在更新附加对象时,这对我来说很好,但是我有一个用例,我们希望能够获取一个分离的对象(由远程客户端通过HTTP / JSON发送到我们的API方法),并将其直接传递给Hibernate会话 – 允许客户端能够以他们喜欢的方式操作父对象并保持更改。 在我的分离对象上调用session.update(parent)时,子表中的行是孤立的(FK列设置为null)但未删除。 请注意,当我调用session.update() ,这是Hibernate Session第一次看到此对象实例 – 我没有以任何其他方式重新附加或合并对象与Session。 我依靠客户端传递其标识符对应于数据库中实际对象的对象。 例如,我的API服务方法中的逻辑是这样的: String jsonString = request.getParameter(…); Parent parent = deserialize(jsonString); session.update(parent); 当传递给session.update(parent)时,Hibernate是否有可能在分离的父对象中检测孤立的session.update(parent) ? 或者我是否以某种方式错误地使用了分离的对象? 我希望我可以避免与Hibernate进行任何复杂的交互,以便将更改持久保存到分离的实例中。 在调用session.update(parent)之后,我的API方法无需进一步修改分离对象,此方法仅负责持久保存远程客户端应用程序所做的更改。

带有Hibernate 4和ManyToOne级联的IllegalStateException

我有两个class MyItem对象: @Entity public class MyItem implements Serializable { @Id private Integer id; @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) private Component defaultComponent; @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) private Component masterComponent; //default constructor, getter, setter, equals and hashCode } 组件对象: @Entity public class Component implements Serializable { @Id private String name; //again, default constructor, getter, setter, equals and hashCode […]