hibernate多个模式映射

时间:2012-12-12 23:05:14

标签: java hibernate jpa mapping ejb

我有一个Hibernate项目和多个实体。每个实体都需要连接到多个数据库。 (table1,table2,table3,table4)相同的模式。

这可以实现吗?或者我是否需要为每个实体创建一个单独的实体?

我的实体看起来像这样

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

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

     //getters setters
}

1 个答案:

答案 0 :(得分: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 emf =   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&amp; YEntity类似,但指向各自的表格。