2012-12-12 56 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