Мне нужно отсоединить некоторые объекты сущностей от базы данных, чтобы сделать их неуправляемыми. Я использую поставщик сохраняемости EclipseLink, метод которого EntityManager.detach () является именно тем, который мне нужен. Проблема в том, что JBoss создает во время выполнения следующее исключение (когда выполнение переходит к detach ()):
javax.ejb.EJBTransactionRolledbackException: Unexpected Error
java.lang.NoSuchMethodError: javax.persistence.EntityManager.detach(Ljava/lang/Object;)V
Другие методы, такие как persist, merge, find, работают нормально. Я попробовал Hibernate и знаю, что его Session предоставляет специальный метод evict (), который отсоединяет сущность, но у EclipseLink такого метода нет.
Пример использования detach ():
@PersistenceContext(unitName="Course7-ejbPU")
protected EntityManager manager;
(...)
Query query;
List<Message> resultList;
query = manager.createNamedQuery("Message.getUserInputMessageList");
query.setParameter("login", login);
query.setMaxResults(5);
resultList = query.getResultList();
for (Message message : resultList)
if (message.getContent().length() > 50)
{
manager.detach(message);
message.setContent(message.getContent().substring(0, 50) + "...");
}
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="Course7-ejbPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>java:/Course7ds</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.target-server" value="JBoss"/>
</properties>
</persistence-unit>
</persistence>
Библиотека с данными провайдера включена в ушной архив.
Версия EclipseLink - 2.2.0 (протестирована с 2.3.2 - без разницы), версия сервера JBoss 5.1.0. Любые предложения будут оценены.