Hibernate ManyToOne级联添加但不删除(Hibernate ManyToOne cascade on Add but not on Delete)

编程入门 行业动态 更新时间:2024-10-10 10:25:47
Hibernate ManyToOne级联添加但不删除(Hibernate ManyToOne cascade on Add but not on Delete)

我有一个自引用表,在我的对象模型中,对象只知道他们的父级,而不是他们的孩子。

我希望在创建子项时创建父节点。 但删除子项时我不希望删除它们。 CascadeType.ALL仍然存在,但也会按预期删除。 CascadeType.PERSIST,不删除,但也无法持久化。

这是可能的还是我在寻找什么? 在我去的时候,我是否必须手动追踪树?

hibernate注释:

import javax.persistence.ManyToOne; @Entity @Table(name = "NODE") public class Node implements Cloneable { @Id @Column(name = "KEY") @SequenceGenerator(name = "NodeSeq", sequenceName = "NODE_SEQ", allocationSize=1) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="NodeSeq") private long key; @ManyToOne (cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH}) @JoinColumn(name="parentkey",referencedColumnName="key") private Node parent; ... }

我正在使用javax.persistance注释和hibernate 4.3.7

更新解决方案除了使用javax.persistence CascadeType之外,我还在使用hibernate session.save和saveOrUpdate。 这是一个需要避免的错误解决方案。 见mkyong

I have a self referential table and in my object model objects only know their parent, but not their children.

I want parent nodes to be created when children are created. But I do not want them deleted when children are deleted. CascadeType.ALL persists, but also deletes as expected. CascadeType.PERSIST, doesn't delete, but also fails to persist.

Is this possible or am I over looking something? Do I have to manually trace up the tree persisting as I go?

The hibernate annotations:

import javax.persistence.ManyToOne; @Entity @Table(name = "NODE") public class Node implements Cloneable { @Id @Column(name = "KEY") @SequenceGenerator(name = "NodeSeq", sequenceName = "NODE_SEQ", allocationSize=1) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="NodeSeq") private long key; @ManyToOne (cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH}) @JoinColumn(name="parentkey",referencedColumnName="key") private Node parent; ... }

I am using javax.persistance annotations and hibernate 4.3.7

Update on solution Along with using javax.persistence CascadeType, I was using hibernate session.save and saveOrUpdate. This is a buggy solution to be avoided. See mkyong

最满意答案

如果使用session.saveOrUpdate(node),则可以使用hibernate注释@Cascade:

@ManyToOne @Cascade({CascadeType.SAVE_UPDATE}) @JoinColumn(name="parentkey",referencedColumnName="key") private Node parent;

If you use session.saveOrUpdate(node) you can use the hibernate annotation @Cascade :

@ManyToOne @Cascade({CascadeType.SAVE_UPDATE}) @JoinColumn(name="parentkey",referencedColumnName="key") private Node parent;

更多推荐

本文发布于:2023-08-06 09:05:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1448367.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:但不   级联   ManyToOne   Hibernate   Add

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!