Java hibernate多模式映射

Java hibernate多模式映射,java,hibernate,jpa,mapping,ejb,Java,Hibernate,Jpa,Mapping,Ejb,我有一个Hibernate项目和多个实体。每个实体需要连接到多个数据库。(表1、表2、表3、表4)相同的模式 这能做到吗?或者我需要为每一个创建一个单独的实体吗 我的实体看起来像这样 @Entity public class table1{ @Id @Column(name="name") private String name; @Column(name="age") private String age; //getters s

我有一个Hibernate项目和多个实体。每个实体需要连接到多个数据库。(表1、表2、表3、表4)相同的模式

这能做到吗?或者我需要为每一个创建一个单独的实体吗

我的实体看起来像这样

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

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

     //getters setters
}

您可以对具有类似模式的不同数据库使用相同的实体,但必须创建指向特定数据库的
EntityManager

  • 为每个数据库创建持久化单元
下面是persistence.xml的示例代码

<persistence-unit name="DB_X"> 
<jta-data-source>java:/OracleDS</jta-data-source>  
... 
</persistence-unit>
<!-- Other Persistence Units -->
  • 否则,也可以在运行时创建它,如下所示
实体管理器工厂emf= 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
类似,但指向各自的表。

您需要连接到多个数据库还是需要从多个表中提取数据?我无法理解您的问题,因为括号中的附加说明有点混乱。我连接到同一个数据库,使用一个实体类连接到该数据库中具有相同架构的多个表。我使用SessionFactory而不是EntityManagerFactory。实体与会话有什么不同吗?@user1817081根据您的评论,更新帖子。请参阅编辑零件。这些类都在同一个文件中。是否有任何方法可以动态配置它。这意味着用户在前端更改某些内容,而后端指向不同的表。我有很多表,我需要映射到这些表,并对它们进行硬编码,但一切都不是很好efficient@user1817081不,他们是不同的班级。您可以根据各自表的逻辑使用适当的类。
@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(){}
}