В моем проекте 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 {
private EntityManager entityManager;
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
public void delete(Entity entity) throws Exception {
try {
entityManager.remove(entity);
} catch (DataAccessException e) {
throw new Exception(e);
}
}
Это 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>
Я стараюсь, чтобы удалить объект из списка, питающихся с помощью этого метода в дао:
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(). –
Спасибо. Теперь он работает правильно, но есть ли какой-либо метод в этой конфигурации. Итак, мне не нужно сначала объединять мою сущность, чтобы выполнить операцию dao на моих сущностях? Я чувствую, что это не лучшая практика. – nazila