Ich verwende JPA über Hibernate 4.1.4.Final
Implementierung. Mein Problem ist, dass ich EntityManager#remove()
nicht arbeiten kann. Alle anderen: update, insert, select operation funktionieren gut außer dieser.Verwenden von JPA mit Hibernate-Implementierung: entityManager.remove - funktioniert nicht
Meine persistence.xml
Datei:
<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>
Meine Answer
Einheit: (BaseEntity Klasse hält nur den Primärschlüssel - 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
}
Beim Aufruf:
public void remove(T entity) {
this.entityManager.remove(this.entityManager.merge(entity));
}
auch versucht:
this.entityManager.remove(entity);
Und:
T ref = entityManager.getReference(entityClass, primaryKey);
entityManager.remove(ref);
Kein Glück :(es den Rekord von Answer
aus der Datenbank nicht gelöscht werden.
I Spring-Konfiguration bin mit dem Entity-Manager wie diese zu konfigurieren:
<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
wird in dem Verfahren genannt, die mit @Transactional
Anmerkung kommentiert wird. Es sollte also kein Transaktionsproblem sein.
Ich habe Hibernate SQL-Protokollierung aktiviert, alle anderen Protokollierung. Ich sehe nirgendwo, dass delete
Abfrage ausgeführt würde oder irgendein Fehler überhaupt.
Und ich habe wirklich keine Optionen hier. Bitte um Rat.
EDIT
Vielleicht wird auch helfen:
ich die Liste der Antworten von der anderen Entität bin immer.Die Antworten sind wie folgt definiert:
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "evaluationPart")
private List<Answer> answers = new LinkedList<>();
Aufruf wie folgt entfernen:
List<Answer> answers = evaluationPart.getAnswers();
if (answers != null && answers.size() > 0) {
for (Answer answer : answers) {
answerFacade.remove(answer); //This calls enetityManager.remove
}
}
Und Ihre anderen Create/Update-Methoden alle funktionieren ok und bestehen wie erwartet? sind diese Methoden in der gleichen Klasse und verwenden das gleiche Setup? – rhinds
Ja. Alles andere funktioniert, alles ist bei anderen Operationen gleich. – user2219247
@rhinds Ich habe die Frage aktualisiert. Vielleicht könntest du das Problem jetzt sehen. – user2219247