私はHibernate 4.1.4.Final
実装でJPAを使用しています。私の問題は、私が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
というクエリが実行される場所やエラーが発生しているとは思われません。
そして、私は本当にここから外れています。ご意見をお聞かせください。
EDIT
多分これも役立ちます:
を私は他のエンティティからの回答のリストを取得しています。このように削除呼び出し
@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
はい。他のすべては動作しており、他の操作ではすべて同じです。 – user2219247
@rhinds質問を更新しました。多分あなたは今問題を見ることができます。 – user2219247