Java JPA CascadeType.ALL不删除孤立项
使用具有以下映射的JPA删除孤立节点时遇到问题Java JPA CascadeType.ALL不删除孤立项,java,hibernate,orm,jpa,jpa-2.0,Java,Hibernate,Orm,Jpa,Jpa 2.0,使用具有以下映射的JPA删除孤立节点时遇到问题 @OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner") private List<Bikes> bikes; @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,mappedBy=“owner”) 私人名单自行车; 我在数据库中遇到了孤立角色的问题 我可以使用a
@OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner")
private List<Bikes> bikes;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,mappedBy=“owner”)
私人名单自行车;
我在数据库中遇到了孤立角色的问题
我可以使用annotationorg.hibernate.annotations.Cascade
hibernate特定标记,但显然我不想将我的解决方案绑定到hibernate实现中
编辑:看来JPA 2.0将包括对此的支持。根据,级联孤立删除不可用作JPA注释
JPA XML中也不支持它。如果将它与Hibernate一起使用,则必须显式定义注释
CascadeType.DELETE\u ORPHAN
,它可以与JPACascadeType.ALL一起使用
如果不打算使用Hibernate,则必须先明确删除子元素,然后删除主记录,以避免出现任何孤立记录
执行顺序
获取要删除的主行
获取子元素
删除所有子元素
删除主行
闭门会议
使用JPA2.0,您现在可以使用选项orphanRemoving=true
@OneToMany(mappedBy="foo", orphanRemoval=true)
如果您将JPA与EclipseLink一起使用,则必须设置@PrivateOwned注释
文档:如果您使用的是JPA2.0,现在可以使用@xxxToMany
注释的orphanRemoving=true
属性来删除孤立项
实际上,CascadeType.DELETE_ORPHAN
在3.5.2-Final中已被弃用。我刚刚找到了这个解决方案,但在我的情况下,它不起作用:
@OneToMany(cascade = CascadeType.ALL, targetEntity = MyClass.class, mappedBy = "xxx", fetch = FetchType.LAZY, orphanRemoval = true)
孤立删除=true无效。只需@OneToMany(cascade=CascadeType.ALL,mappedBy=“xxx”,fetch=FetchType.LAZY,孤立删除=true)
删除targetEntity=MyClass.class,效果很好。对于记录,在JPA2之前的OpenJPA中,它是@ElementDependent。您可以使用@PrivateOwned删除孤立项
e、 g
@OneToMany(mappedBy=“masterData”,级联={
CascadeType.ALL})
@私有的
私有列表数据列表;
我也有同样的问题,我想知道为什么下面的这种情况没有删除孤儿。在Hibernate(5.0.3.Final)中,当我执行命名的删除查询时,没有删除菜品列表:
@OneToMany(mappedBy = "menuPlan", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Dish> dishes = new ArrayList<>();
@OneToMany(mappedBy=“menuPlan”,cascade=CascadeType.ALL,orphan=true)
private List disks=new ArrayList();
然后我想起我不能使用命名的删除查询,而是使用EntityManager。当我使用EntityManager.find(…)
方法获取实体,然后使用EntityManager.remove(…)
删除实体时,盘子也被删除了 我使用的是一对一映射,但孩子并没有被删除,JPA给出了外键冲突
在使用OrphanRemove=true之后,问题得到了解决谢谢我最终选择了这条路线,我认为这对于JPA规范来说有点过头了。JPA 2.0标准现在将deleteOrphan作为@OneToMany的一个属性,如果您使用的是最新的hibernate,您可以执行@OneToMany(…,deleteOrphan=true)当我只更新子元素时,执行顺序是什么?孤儿记录会被删除吗?实际上,我认为orphanRemoving=true意味着其他东西,即,当我从父对象的集合中删除某个对象时,将其删除。请通过Archie的链接查看g。OrphanRemoving=true也不起作用。它必须以旧的方式完成。感谢@reshma,应该注意的是@PrivateOwned是eclipselink JPA的扩展。我需要在更改生效之前进行清理和构建。哇,我已经花了一个小时来研究为什么要添加CascadeType。我的manytone上的所有内容都不是级联删除。清洁和建设,它的工作。谢谢@maralbjo@OneToOne(cascade=CascadeType.ALL,orphanRemoving=true)@JoinColumn(name=“CHILD\u OID”)private CHILD;如果我有cascade=CascadeType.ALL,orphanRemoving=false
并删除父级,会发生什么?它会删除孩子吗,即使我明确告诉过不要删除?
╔═════════════╦═════════════════════╦═════════════════════╗
║ Action ║ orphanRemoval=true ║ CascadeType.ALL ║
╠═════════════╬═════════════════════╬═════════════════════╣
║ delete ║ deletes parent ║ deletes parent ║
║ parent ║ and orphans ║ and orphans ║
╠═════════════╬═════════════════════╬═════════════════════╣
║ change ║ ║ ║
║ children ║ deletes orphans ║ nothing ║
║ list ║ ║ ║
╚═════════════╩═════════════════════╩═════════════════════╝
@OneToMany(mappedBy = "menuPlan", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Dish> dishes = new ArrayList<>();