2014-03-12 61 views
0

我遷移代碼從EJB2到EJB3獨特。我已將POJO轉換爲JPA實體。很少有實體相同的名稱,如@Entity(name =「myentity1」)。我在部署時遇到錯誤「實體名稱在持久性單元中必須是唯一的」。發生這種情況是因爲模塊依賴於其他模塊,這些模塊具有相同名稱的實體。有什麼方法可以在使用SessionCustomizer或其他任何方式時動態更新名稱?此時我無法更改實體名稱,因爲實體名稱被廣泛使用。我使用EcllipseLink 2.5EcllipseLink:具有相同名稱的JPA實體。錯誤:實體名稱必須是一個持久性單元

示例代碼

EJB模塊1(依賴於EJB單詞數)

package com.my.module1.package1; 

@javax.persistence.Entity(name = "myentity1") 
@Table(name = "TABLE1") 
public class MyEntity1 
    implements Serializable { 

    @Column(name = "ID") 
    private Long Id; 

    public Long getId() { 
    return Id; 
    } 

    public void setId(Long Id) { 
    this.Id = Id; 
    } 
} 

// EJB單詞數

package com.my.module2.package2; 

@javax.persistence.Entity(name = "myentity1") 
@Table(name = "TABLE1") 
public class MyEntity1 
    implements Serializable { 

    @Column(name = "ID") 
    private Long Id; 

    public Long getId() { 
    return Id; 
    } 

    public void setId(Long Id) { 
    this.Id = Id; 
    } 
} 

任何幫助將非常感激。

+0

他們必須在持久性單元唯一的,這樣的名字可以識別哪些類和表將被用於查詢。你的包雖然可能會進入他們自己的持久化單元,而不是將它們合併成一個。或者你可以用orm.xml覆蓋實體註釋。 – Chris

回答

1

是有一種方法。在persistence.xml,你可以定義自己的持久性單元,也是,你想在你的持久單元類列表中,還出現了一個XML標記

<exclude-unlisted-classes>true</exclude-unlisted-classes> 

以上將禁用添加任何其他沒有列出的實體類,其他類不會被添加到persistenceUnit,我認爲這將解決碰撞問題。

<class>只是配置和上面的標籤所有的持久化單元。

+0

感謝您的回覆。有什麼辦法排除列出的類?因爲我有這需要持久化單元,但所述需要exclude.Or類小清單,包括類長的名單,我們可以使用正則表達式中標籤。 – user3408439

+0

我認爲正則表達式不允許存在,在xsd中並沒有提供任何關於它的信息 – Koitoer

0

保留註釋(@Table(name = "TABLE1"))僅高於您通過EntityManager持久保存到數據庫中的註釋。並從其他人身上移除。您的實體名稱必須在persistence unit中唯一。

+0

Vaiya,當我重構並將數據庫實體從一個包移動到另一個包時,同樣的問題發生在我的身邊。以clean-build動作重新啓動我的IDE後,所有內容都像幻影故事一樣解析。 –

相關問題