Hibernate 4.1.4.Final
uygulaması üzerinde JPA kullanıyorum. Benim sorunum, EntityManager#remove()
çalışamıyorum. Diğer tüm: güncelleme, ekleme, seçme işlemi bunun dışında gayet iyi çalışıyor.Hazırda bekleme ile JPA kullanımı: entityManager.remove - çalışmıyor
Benim persistence.xml
dosyası: (BaseEntity sınıfı sadece birincil anahtarı tutuyor - ID) çağrılırken
@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
}
:
Benim Answer
varlık
<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>
public void remove(T entity) {
this.entityManager.remove(this.entityManager.merge(entity));
}
Ayrıca çalıştı:
this.entityManager.remove(entity);
Ve:
T ref = entityManager.getReference(entityClass, primaryKey);
entityManager.remove(ref);
Hiçbir şans :(o veritabanından Answer
rekorunu silme değildir. Böyle varlık yöneticisi yapılandırmak için Bahar yapılandırmasını kullanıyorum
:
<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
ek açıklamasıyla açıklamalı yöntemde denir. Yani işlem sorunu olmamalı.
Hazırda bekletme SQL günlüğünü, tüm diğer günlüğe kaydetmeyi etkinleştirdim. delete
sorgusunun yürütüleceği veya herhangi bir hata görmeyeceğim.
Ve gerçekten burada seçeneklerimin dışındayım. Lütfen tavsiye.
DÜZENLEME Belki bu da yardımcı olacaktır:
Diğer varlıktan cevapların listesini alıyorum.cevaplar şöyle tanımlanmıştır:
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "evaluationPart")
private List<Answer> answers = new LinkedList<>();
böyle kaldırmak çağrılması:
List<Answer> answers = evaluationPart.getAnswers();
if (answers != null && answers.size() > 0) {
for (Answer answer : answers) {
answerFacade.remove(answer); //This calls enetityManager.remove
}
}
Ve diğer Oluşturma/Güncelleştirme yöntemleri tüm işlemler tamam ve beklendiği gibi devam ediyor? Aynı sınıftaki ve aynı kurulumu kullanan yöntemler nelerdir? – rhinds
Evet. Diğer her şey çalışıyor, diğer işlemler için her şey aynı. – user2219247
@rhinds Soruyu güncelledim. Belki şimdi sorunu görebileceksiniz. – user2219247