【问题标题】:Hibernate Annotation for Entity existing in more than 1 catalog存在于 1 个以上目录中的实体的休眠注释
【发布时间】:2010-03-04 16:08:56
【问题描述】:

我有一个由 Hibernate 映射到数据库目录“活动”中的数据库表的 Person 实体。一段时间后,“活动”目录中此数据库表中的记录被存档/移动到数据库目录“历史”中表的精确副本。我需要从活动目录和历史目录中检索。有没有更好的方法来使用 Hibernate 注释进行建模,而不是创建一个扩展 2 个类的抽象类。

这就是我现在所拥有的。

@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 {
}

【问题讨论】:

    标签: java hibernate orm hibernate-annotations


    【解决方案1】:

    据我所知,这将是使用注释的正确方法(您有点有两个表,所以您需要两个实体)。然后对Person 实体运行多态查询。顺便说一句,我觉得这很干净。

    PS:您能否添加一个关于如何使用映射文件执行此操作的指针,我真的很好奇。

    【讨论】:

    • 感谢您的洞察力。过去,当我在使用 Spring JDBC 的其他项目中遇到此业务需求时,我将只有一个类和一个用于两个表的行映射器。我以前没有用hibernate做过,但这里有一个例子old.nabble.com/… (...) (...)
    【解决方案2】:

    我的想法是编写一个查询以从 db 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  {
    ...
    }
    

    不确定它是否可行,您的问题也让我对最好的方法感到好奇:)。今晚下班后我会测试一下,看看它是否好用。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-24
        • 2011-12-05
        • 2016-02-14
        • 2023-03-17
        • 1970-01-01
        相关资源
        最近更新 更多