【问题标题】:Mapping a SQL View with no Primary Key to JPA Entity将没有主键的 SQL 视图映射到 JPA 实体
【发布时间】:2013-12-10 17:31:54
【问题描述】:

在我的 Java 应用程序中,我想使用 JPA 获取存储在我的 Oracle 数据库中的信息。 在我的数据库中,我有一个视图,其中包含一组从其他表中获得的列。我想映射那个视图。但是,我的 视图没有主键,所以我无法创建 JPA 实体。我想过使用 2 列作为外键

实现它的最佳方式是什么?我见过很多不同的方法,我无法决定哪种方法最适合这种情况。

【问题讨论】:

    标签: java sql hibernate jpa foreign-keys


    【解决方案1】:

    没有最好的方法。由于这是一个视图,您永远不会在其中插入任何数据,这意味着您可以简单地在任何现有字段上定义一个主键。您也可以尝试使用insertable=false, updatable=false 标记该字段。

    更新

    您更了解您的数据,但一般在视图中您不能保证所有记录都是唯一的,这就是为什么您应该一般避免直接使用实体从视图。我建议宁愿使用 Wrapper 类,例如:

    SELECT new com.domain.MyWrapper(field1, field2, field3, field4,...) FROM ViewEntity
    

    【讨论】:

    • 当我获取有关表中设置为主键的字段具有相同内容的行的信息时,这不起作用。没有给出错误,但信息发生了变化。
    • 更新了响应。
    • 如果我前段时间看到您的回答,我永远不会查看数据库并将其映射为实体。唯一性扼杀了我的应用报告,因此我几乎放弃了我的项目......谢谢
    【解决方案2】:

    解决此问题的一种方法是使用复合主键,只需将@Id 注释添加到适当的字段。

    【讨论】:

    • 谢谢,使用复合主键(带有@IdClass 注释)解决了我的问题。
    • 感谢这是解决方案,将@Id 添加到视图解决了我的问题,我使用的是 Arquillian,所以我必须为视图添加实体并添加另一个字段以添加主键跨度>
    猜你喜欢
    • 2012-07-04
    • 2015-06-19
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 2014-02-19
    • 2012-04-06
    相关资源
    最近更新 更多