Hibernate注解用于存在于多个目录中的实体

7
我有一个Person实体,通过Hibernate映射到一个名为“Active”的数据库目录中的数据库表。一段时间后,“Active”目录中的此数据库表中的记录将被存档/移动到一个名为“History”的数据库目录中的完全相同的表中。我需要从Active和History目录中检索。在Hibernate注释中,有没有更好的建模方式,而不是创建两个类继承自抽象类的方法。
@MappedSuperclass
public abstract class Person  {

    @Id
    private Integer id;
    private String name;
}

@Entity
@Table(name="Person", catalog="Active")
public class PersonActive extends Person {
}

@Entity
@Table(name="Person", catalog="History")
public class PersonHistory extends Person {
}
3个回答

1
据我所知,使用注释(你有两个表,因此需要两个实体)是正确的方法。然后在Person实体上运行多态查询。顺便说一句,我认为这样非常干净。
附注:您能否指出如何使用映射文件进行此操作,我真的很好奇。

1
谢谢你的洞察力。过去,当我在使用Spring JDBC的其他项目中遇到这个业务需求时,我只需要一个类和一个行映射器就可以同时处理这两个表格。虽然我以前没有用过Hibernate来实现这个功能,但是这里有一个示例:http://old.nabble.com/Mapping-class-to-multiple-tables-with-entity-name-(hibernate-plugin)-to9547563.html<hibernate-mapping> <class table="CLASS" name="some.my.Class"> (...) </class> <class entity-name="archived" table="ARCHIVED_CLASS" name="some.my.Class"> (...) </class></hibernate-mapping> - Daniel Spivey

0
我的想法是编写一个查询,从数据库A和B中选择两个表。然后使用Hibernate创建一个查询并将其映射到您的类。
例如:
@Entity
@NamedNativeQuery(
name="GetAllPerson",
query="select * from A.Person inner join B.Person on A.Person.Id = B.Person.Id"
)
public class Person  {
...
}

不确定它是否可行,你的问题也让我对最佳方法感到好奇:)。下班后我会测试一下,看看效果如何。


0

我认为Hibernate有一个名为Shards的子项目。它旨在与多个关系型数据库一起使用。如果您想使用它,可能需要对您的代码进行大量更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接