エンティティオブジェクトをデータベースから切り離して、非管理対象にする必要があります。私は、EntityManager.detach()メソッドが必要とするメソッドである、EclipseLink永続性プロバイダを使用します。問題は、(実行を取り外すために通過するとき())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>
プロバイダデータのライブラリは、EARアーカイブに含まれています。 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も含まれています。 –