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

Java 将JPA与Hibernate实现一起使用:entityManager.remove-不工作,java,hibernate,jpa,persistence,Java,Hibernate,Jpa,Persistence,我在Hibernate4.1.4.1的最终实现上使用JPA。我的问题是我无法让整个管理器重新运行。除此之外,所有其他操作:更新、插入、选择操作都正常工作 My persistence.xml文件: 打电话时: public void remove(T entity) { this.entityManager.remove(this.entityManager.merge(entity)); } 还尝试: this.entityManager.remove(entity); 以及:

我在Hibernate4.1.4.1的最终实现上使用JPA。我的问题是我无法让整个管理器重新运行。除此之外,所有其他操作:更新、插入、选择操作都正常工作

My persistence.xml文件:

打电话时:

public void remove(T entity) {
    this.entityManager.remove(this.entityManager.merge(entity));
}
还尝试:

this.entityManager.remove(entity);
以及:

不走运:它没有从数据库中删除答案记录

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

<bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
    <property name="persistenceXmlLocations">
        <list>
            <value>classpath*:META-INF/persistence.xml</value>
        </list>
    </property>
    <property name="defaultDataSource" ref="dataSource"/>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitManager" ref="persistenceUnitManager"/>
    <property name="persistenceUnitName" value="myEntityManager"/>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager"/>
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "evaluationPart")
private List<Answer> answers = new LinkedList<>();
List<Answer> answers = evaluationPart.getAnswers();
if (answers != null && answers.size() > 0) {
    for (Answer answer : answers) {
        answerFacade.remove(answer); //This calls enetityManager.remove
    }
}
这样调用remove:

<bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
    <property name="persistenceXmlLocations">
        <list>
            <value>classpath*:META-INF/persistence.xml</value>
        </list>
    </property>
    <property name="defaultDataSource" ref="dataSource"/>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitManager" ref="persistenceUnitManager"/>
    <property name="persistenceUnitName" value="myEntityManager"/>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager"/>
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "evaluationPart")
private List<Answer> answers = new LinkedList<>();
List<Answer> answers = evaluationPart.getAnswers();
if (answers != null && answers.size() > 0) {
    for (Answer answer : answers) {
        answerFacade.remove(answer); //This calls enetityManager.remove
    }
}

我可能不在主题范围内,但这些可能是问题的关键所在

第一个理由— 此条目中未定义任何级联类型

 @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "QUESTION_ID", nullable = false)
    private Question question;  
第二个原因更像是一个建议

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


希望这有帮助:

和您的其他创建/更新方法都能正常工作并按预期持久化?这些方法是否在同一类中并使用相同的设置?是。其他一切正常,其他操作也一样。@rhinds我已经更新了问题。也许你现在就能看到问题了。服务器日志中的任何错误都没有,与错误无关,没有错误,只有常见的hibernate和SQL。没有定义级联类型,因为我不希望以任何方式级联此对象:这很好。你的第二个理由给了解决办法。是的,如果我要从列表中删除entityManager.remove,我不需要调用它,这样就行了。谢谢仍然不能完全理解为什么hibernate没有清除持久性上下文。可能是因为对象是延迟加载的…只是有同样的问题,如果Hibernate至少会因为你调用em.removeref删除列表项而对你大喊大叫,那就好了。哦,好吧,吸取了教训。