我使用JPA而不是Hibernate 4.1.4.Final
實現。我的問題是,我無法獲得EntityManager#remove()
的工作。所有其他:更新,插入,選擇操作工作正常,除此之外。使用JPA與Hibernate實現:entityManager.remove - 不能正常工作
我persistence.xml
文件:
<persistence-unit name="myEntityManager">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>core.entity.Answer</class>
<class>core.entity.BaseEntity</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<validation-mode>NONE</validation-mode>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
我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配置文件來配置實體管理器這樣的:
<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"/>
remove
被稱爲在標註有@Transactional
註釋的方法。所以它不應該是交易問題。
我已啓用Hibernate SQL日誌記錄,所有其他日誌記錄。我沒有看到delete
查詢將被執行或任何錯誤。
我真的沒有在這裏的選擇。請指教。
編輯
也許這也將有助於:
我正在從其他實體答案的列表。這些問題的答案是這樣定義的:
@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
}
}
而你的其他創建/更新方法都可以正常工作,並按預期持續嗎?這些方法是否在同一個班級並使用相同的設置? – rhinds 2013-03-28 10:52:48
是的。其他一切正在工作,其他操作的一切都是一樣的。 – user2219247 2013-03-28 10:55:50
@rhinds我更新了這個問題。也許你現在可以看到問題了。 – user2219247 2013-03-28 12:21:39