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
}
4

1 回答 1

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&YEntity是相似的,但指向它们各自的表。

于 2012-12-13T06:58:25.103 回答