2012-12-12 149 views
1

我有一個Hibernate項目和多個實體。每個實體都需要連接到多個數據庫。 (table1,table2,table3,table4)相同的模式。休眠多模式映射

這能做到?還是我需要爲每個人創建一個單獨的實體?

我的實體是這個樣子

@Entity 
public class table1{ 
    @Id 
    @Column(name="name") 
    private String name; 

    @Column(name="age") 
    private String age; 

    //getters setters 
} 
+0

你需要連接到多個數據庫** **或者您需要從多個表中獲取數據?我無法理解你的問題,因爲括號內的附加解釋有點令人困惑。 –

+0

我正在連接到同一個數據庫,我想要連接到具有相同模式的數據庫中的多個表的一個實體類。 – user1817081

回答

2

您可以使用同一個實體具有相似的架構不同的數據庫,但必須建立EntityManager指向特定的數據庫。

  • 創建持久性單元,每個數據庫。

下面是persistence.xml中

<persistence-unit name="DB_X"> 
<jta-data-source>java:/OracleDS</jta-data-source> 
... 
</persistence-unit> 
<!-- Other Persistence Units --> 

創建EntityManager的特定單元

@PersistenceContext(unitName="DB_X") 
private EntityManager xEM; 

@PersistenceContext(unitName="DB_Y") 
private EntityManager yEM; 
  • 否則,也可以在運行時創建如下面的示例代碼。

EntityManagerFactory的電動勢= Persistence.createEntityManagerFactory(persistenceUnitName來); EntityManager em = emf.createEntityManager();

之後,就可以使用同一個實體具有相似的模式,適當EntityManager表結構不同的數據庫。


編輯:根據您的意見,從你已經張貼的問題不同,看來你要使用同一個實體的多個表。以下是它的示例代碼。

@MappedSuperClass 
public class abstract BaseEntity { 
    @Id 
    @Column(name="name") 
    private String name; 

    @Column(name="age") 
    private String age; 

    //-- accessor methods 
} 

@Entity 
@Table(name = "XTable") 
public class XEntity extends BaseEntity { 
    public XEntity(){} 
} 

@Entity 
@Table(name = "YTable") 
public class YEntity extends BaseEntity { 

    public YEntity(){} 
} 

這裏,XEntity & YEntity相似,但指向它們各自的表。

+0

我正在使用SessionFactory而不是EntityManagerFactory。實體與會話有什麼不同? – user1817081

+0

@ user1817081根據你評論,更新後。請參閱編輯部分 –

+0

那麼這些類都在同一個文件中。有沒有辦法動態配置它。這意味着用戶在前端和後端改變某些東西指向不同的表格。我有很多需要映射到的表以及硬編碼的一切都不會很有效 – user1817081