[英]Error on client side while calling a business method on server side returning managed entity
我的客戶端應用程序是使用Netbeans RCP的獨立Java應用程序。 客戶端應用程序連接到Glassfish服務器上安裝的遠程EJB。
在服務器端,我有一個業務方法(我用於測試),它應該接受一個實體的實例(該實體尚未持久化或管理),持久化它(使用EntityManager
的persit
)。
以下是此方法的外觀:
@Override
public TestLinkEntity test(TestLinkEntity c) {
em.persist(c);
return c;
}
從客戶端調用如下:
TestLinkEntity c = remote.test(new TestLinkEntity());
這是TestLinkEntity
聲明:
@Entity
public class TestLinkEntity implements AltEntity, Serializable {
private Set<TestAppEntity> links = new HashSet<TestAppEntity>();
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Override
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@OneToMany(mappedBy="links")
public Set<TestAppEntity> getLinks() {
return links;
}
}
現在TestAppEntity
用於一對多的關系。
@Entity
public class TestAppEntity implements Serializable, AltEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String test;
public TestAppEntity() {
}
@Override
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
我面臨的問題是,當我嘗試從客戶端調用業務方法時(如上所示),我在客戶端獲得了一個巨大且非常難以理解的異常,並且僅在客戶端。 Glassfish日志上沒有記錄異常,實體( TestLinkEntity
)和潛在鏈接( TestAppEntity
)存儲在數據庫中。
我在這里粘貼了這個例外。
以下是我注意到的一些事情。
只有在我嘗試返回托管實體時才會發生異常。 如果我更換em.persist()
由em.merge
,不返回由合並例如返回新的實體,該異常將永遠不會提高。 例如,做一些事情:
@Override public TestLinkEntity test(TestLinkEntity c) { em.merge(c); return c; }
僅當返回的實體包含一對多關系時才會發生異常。 例如,以下代碼片段之類的內容不會引發異常:
@Override public TestAppEntity test(TestAppEntity c) { em.persist(c); return c; }
TestAppEntity不包含任何關系。
我確定的事情:
TestAppEntity
和TestLinkEntity
都是相同的。 編輯:
由於@James的答案,我現在想知道eclispelink.jar中的包javax.persistence
和javaee.jar之間的區別是什么。 我應該包括兩者嗎?
包括兩者都會引起麻煩(可能是由於兩個罐子中的包裝名稱相同)。
error: in class file javax/persistence/NamedQuery.class(javax/persistence:NamedQuery.class): unknown enum constant javax.persistence.LockModeType.NONE
Note: Attempting to workaround javac bug #6512707
warning: No processor claimed any of these annotations: [javax.ejb.Remote]
error: in class file j javax/persistence/NamedQuery.class(javax/persistence:NamedQuery.class): unknown enum constant javax.persistence.LockModeType.NONE
它似乎是您正在使用的CORBA序列化中的一些錯誤。
我的猜測是你的客戶端上沒有eclipseLink.jar,但你需要它。 從數據庫中讀取的對象將包含特殊的LAZY集合實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.