Hibernate删除一条记录,但记录不会消失?
编辑:哎呀,我想如果我发布删除代码会有所帮助。 抱歉。
// delete from permanent store and local list int index = get_record_to_delete(); if (entityList.getEntities().get(index).getEntityId() != null ) { // existing persisted record entityService.delete(entityInfo.getEntities().get(index).getEntityId()); } //remove from local list entityList.getEntities().remove(index); return ownersInfo; // entityService called by above code public void delete(MyEntity entity) { repository.delete(entity); // subclass of org.springframework.data.jpa.repository.JpaRepository }
我正在使用Spring Data / JPA V 1.4.2.RELEASE和hibernate 3.6.10.Final。
我有一种情况,我正在删除一个实体,删除似乎工作,但当我刷新我的网页时,该实体重新出现。 因此,它不会产生错误,但记录不会被删除。
该实体包含子实体。 我怀疑某种实体依赖问题是让实体不被真正“删除”,但我不知道它可能是哪种实体依赖,而Hibernate没有告诉我。 包含的实体是否被删除无关紧要,但需要删除此实体。 不知道为什么没有发生这种情况。 这是我要删除的实体:
public class MyEntity implements java.io.Serializable { @Id @GeneratedValue @Column(name = "MYID", unique = true, nullable = false) private Long myId; @Column(name = "MY_NAME", nullable = false, length = 50) private String myName; @ManyToOne @JoinColumn(name = "ADDRESS_ID", nullable = false) private AddressEntity myAddress; @ManyToOne @JoinColumn(name = "OTHER_ADDRESS_ID", nullable = true) private AddressEntity myOtherAddress; @ManyToOne @JoinColumn(name = "TYPE_CODE", nullable = false) private MyType myType; @ManyToOne @JoinColumn(name = "ADDRESS_CODE", nullable = false) private AddressCode addressCode; @Column(name = "OTHER", nullable = false, precision = 3, scale = 0) private Integer myOther; @ManyToOne @JoinColumn(name = "PARENT_ID", nullable = false) private MyParent parent; @Column(name = "PHONE", nullable = false, precision = 10, scale = 0) private Long myPhone; @Column(name = "SOCIAL", nullable = false, length = 9) private String mySocial; }
有人看到任何可能暗示为什么这个实体不会删除?
结果是Hibernate @OneToMany注释取消删除的情况。
因为父对象上有一个@OneToMany(cascade=CascadeType.ALL)
注释,如下所示:
Class MyParent { @OneToMany(cascade=CascadeType.ALL) Set myObjects; }
Hibernate显然遍历整个对象图,由于某种原因,因为这个父级没有被删除,所以它取消了子删除。
要检测到这一点的方法是将日志记录一直转到TRACE
并从Hibernate中查找以下消息:
un-scheduling entity deletion
这些是让你知道Hibernate取消删除的神奇词汇。 这没有特别好记录,所以我希望这有助于其他人。
在映射类中使用此级联类型。 它将从数据库中删除记录。
@OneToMany(cascade=CascadeType.ALL)
- JTASessionContext与JDBCTransactionFactory一起使用; 使用getCurrentSession()自动刷新将无法正常运行
- Hibernate:具有相同标识符值的不同对象已与会话关联
- hibernate选择所有投影组
- 使用persistence.xml时将Hibernate 4.0与Tomcat 7一起使用时出现JndiException
- LazyInitializationException,同时使用TestNG对Spring中使用的Hibernate实体类进行unit testing
- 运行时的Hibernate配置
- 如何在复合键中使用生成的值?
- 使用hibernate更新数据库模式
- 如何使用Hibernate JPA线程安全进行数据库访问?