将JPA与Hibernate实现一起使用:entityManager.remove – 不工作

我使用JPA而不是Hibernate 4.1.4.Final实现。 我的问题是我无法让EntityManager#remove()工作。 所有其他:更新,插入,选择操作正常工作,除了这一个。

我的persistence.xml文件:

  org.hibernate.ejb.HibernatePersistence core.entity.Answer core.entity.BaseEntity true NONE       

我的Answer实体:( BaseEntity类只保存主键 – ID)

 @Entity @Table(name = "ANSWER") @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public class Answer extends BaseEntity { @Column(name = "ANSWER_VALUE") private String answerValue; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "QUESTION_ID", nullable = false) private Question question; //overrided equals, hascode, toString // all getters and setters } 

致电时:

 public void remove(T entity) { this.entityManager.remove(this.entityManager.merge(entity)); } 

还尝试过:

 this.entityManager.remove(entity); 

和:

 T ref = entityManager.getReference(entityClass, primaryKey); entityManager.remove(ref); 

没有运气:(它没有删除数据库中的Answer记录。

我使用Spring配置来配置实体管理器,如下所示:

    classpath*:META-INF/persistence.xml             

在使用@Transactional注释注释的方法中调用remove 。 所以它不应该是交易问题。

我已经启用了Hibernate SQL日志记录,所有其他日志记录。 我没有看到任何delete查询将被执行或任何错误。

我真的没有选择。 请指教。

编辑

也许这也会有所帮助:

我从其他实体获得答案列表。 答案定义如下:

 @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "evaluationPart") private List answers = new LinkedList(); 

像这样调用删除:

 List answers = evaluationPart.getAnswers(); if (answers != null && answers.size() > 0) { for (Answer answer : answers) { answerFacade.remove(answer); //This calls enetityManager.remove } } 

我可能不在话题中,但这些可能是问题的问题

第一个原因 – 此条目中未定义cascadeType

  @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "QUESTION_ID", nullable = false) private Question question; 

第二个原因 (更多建议)

由于Answer的链接列表映射到Question对象,因此不建议直接从列表中删除单个对象作为一种良好做法。 最好从链表中删除元素,然后更新/合并将在Answer表上自动执行删除操作的问题对象。

希望这可以帮助 :)