엔티티 개체를 데이터베이스에서 분리하여 관리되지 않게해야합니다. 필자는 EntityManager.detach() 메소드가 필요한 바로 하나 인 EclipseLink Persistence Provider를 사용한다. 문제는 (실행이 분리 통과 할 때()) JBoss의 예외 다음 실행시에 발생한다는 것입니다 : 잘 작동을 발견, 병합, 계속 같은엔티티를 분리하는 방법 (JPA 2.0/EclipseLink/JBoss)
javax.ejb.EJBTransactionRolledbackException: Unexpected Error
java.lang.NoSuchMethodError: javax.persistence.EntityManager.detach(Ljava/lang/Object;)V
다른 방법. 나는 Hibernate를 시도했고 그것의 Session이 엔티티를 분리하는 특별한 메소드 evict()를 제공한다는 것을 알고 있지만, EclipseLink는 그러한 메소드를 가지고 있지 않다. 분리()를 사용하는 예 :
@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입니다. 모든 제안을 주시면 감사하겠습니다.
JBoss가 어떤 JPA 버전을 사용하는지 확인할 수 있습니까? 영구적 인 제공자의 라이브러리 버전 만 생각했습니다. 필자는이 버전 (5.1.0.GA)에 프로젝트를 배포해야하기 때문에보다 최신 JBoss 버전을 사용할 수 없습니다. – Eadel
그건 그렇고, 프로젝트가 Glassfish 3.1.1에 배포되었을 때 detach()는 정상적으로 작동했습니다. 그러나 EclipseLink 라이브러리를 요구하지 않았습니다. – Eadel
ejb3-persistence.jar은 JBoss 5.1은 javax.persistence 클래스를 포함하고 있습니다. 이것을 열면 JPA1에 도입 된 클래스가 포함되어 있지 않음을 알 수 있습니다. 포함 된 라이센스 파일에는 JPA 1.0이 포함되어있는 Enterprise JavaBeans v.3.0에 대해서도 언급되어 있습니다. –