在Hibernate中有可能吗?如何?

时间:2012-02-28 06:47:04

标签: java hibernate

我正在寻找基于表类型和引用键从2个不同表中获取数据的解决方案,请查看以下示例表结构和实体类。

1**Type**
    (ID, TableName // Value for TableName can be 'TableA' or 'TableB')

2**TableA**
  ( ID, NameForA)

3**TableB**
   (ID, NameForB)

4**TableMain**
   (ID, Name, TypeID (foreign key of Type table), DataID (can be reference of TableA or TableB))

实体类结构

Class Abstract Model{ int ID; } // Model is base class, holds data of ID field and is parent for all entity classes

Class Type extends Model{String TableName;}

Class TableA extends Model{String NameForA;}

Class TableB extends Model{String NameForB;}

Class TableMain extends Model{
String Name;
Type type;
Model data; // can be TableA class or TableB based on Type
}

我正在寻找的是,TableMain类有字段'data'它可以是TableA或TableB类的对象,如果表名是'TableA'那么它将基于'Type'来保存tableName然后数据将是实例TableA类或如果tableName是'TableB',则数据将是TableB的实例。

我知道这不是一个好习惯,但我已经有了很大的数据库结构,我无法改变它。所以这是我必须解决的唯一方法。

是否有人可以帮助我,如何使用hibernate或任何其他方式?或者是否可以通过hibernate自动填充数据。

感谢。

1 个答案:

答案 0 :(得分:1)

使用PostgreSQL,您可以轻松地继承数据库表:

Create Table model(...);
Create Table type(...) inherits model; 

适合Java

public class Model{...}
public class Type extends Model{...}

(尝试使用eNexus DB Designer(enexus dbd)。)