在我的JSF2-JPA2-Spring3項目中,我可以插入新實體但不能刪除實體。這是錯誤消息:java.lang.IllegalArgumentException異常:刪除脫管的實例entity.Entity#8爲什麼JPA可以保存我的實體但它不能刪除實體?
這是我的persistence.xml:
<?xml version="1.0" encoding="UTF-8" ?>
http://java.sun.com/xml /ns/persistence/persistence_1_0.xsd」 版本= 「1.0」>
<persistence-unit name="myPersistenceUnit"
transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
這是我的服務:
@Service("myService")
公共類MyServiceImpl實現爲MyService {
@Resource(name="MyRepository")
MyDAO myDao;
@Transactional
public void deleteEntity(Entity entity) throws DAOException {
myDao.delete(entity);
}
這是我道:
@Repository("MyRepository")
公共類的UserDAO {
這是applicationContext.xml中:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" >
</bean>
</property>
<property name="dataSource" ref="myDataSource" />
<property name="persistenceUnitName" value="myPersistenceUnit"/>
</bean>
<bean name="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven />
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<tx:advice id="transactionInterceptor" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" rollback-for="Throwable" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor pointcut=" execution(* service.*Service.*(..))"
advice-ref="transactionInterceptor" />
</aop:config>
我嘗試從DAO使用這種方法喂列表中刪除的實體:
public List<Entity> getAll() throws Exception {
List<Entity> list = null;
try {
list = entityManager.createQuery("Select e from Entity e").getResultList();
} catch (DataAccessException e) {
throw new Exception(e);
}
return list;
}
謝謝。但是當我這樣做:entityManager.merge(entity); \t \t \t entityManager。除去(實體);同樣的錯誤發生! – nazila
我清理了我的代碼示例以使其更具可讀性。再次閱讀註釋 - 您無法在實體上調用合併,然後移除該實體,您必須使用從merge()返回的實體。 –
謝謝。現在它工作正常,但是在這個配置中有沒有任何方法所以我不必首先合併我的實體來對我的實體進行道操作?我覺得這不是最佳做法。 – nazila