【问题标题】:Mapping SQL View to JPA Entity将 SQL 视图映射到 JPA 实体
【发布时间】:2012-07-04 20:00:11
【问题描述】:

在我的开发项目中,我使用 JPA(休眠)作为 OR 映射技术来访问数据库。当我将数据库表直接映射到实体以实现复杂关系时,有时会遇到性能问题和技术难题。

我发现一种解决方法是将 DB 视图映射到 JPA 实体。这使编码更容易,有时性能更好。您认为以这种方式使用 JPA 是一种反模式吗?

【问题讨论】:

  • 对你更好的东西显然不是“反模式”。你最清楚什么对你更有效......

标签: design-patterns jakarta-ee jpa


【解决方案1】:

这不是解决方法,也不是反模式。mapping JPA Entities to SQL Views 上有一个主题。 它为您提供了是否使用此方法的足够信息。

就个人而言,我更喜欢 Java 类,因此我使用 Result Classes Constructor Expression。它根据结果查询返回实例化和填充所提供类的对象。

您可以查看这两种提高性能并降低结构复杂性的方法。

【讨论】:

  • 我也更喜欢将结果与结果类进行映射,但我对自定义实体方法有些怀疑。根据规范,JPA 实体必须有一个@Id 字段;但是,您可以查看包含重复记录的视图。你如何处理这种情况?
  • 这是个好问题。您认为从视图的多个列创建哈希列会有所帮助吗?它可以作为主键。
  • @JMelnik 我也很想用 Java 类来实现。我有一个关于构造函数表达式的问题,我的问题是如果使用构造函数表达式,如何使用 ORDER BY 属性?例如,请参阅 this 我有一个复杂的查询,我无法执行 ORDER BY
【解决方案2】:

JMelnik 友情提供的链接有问题: 我在 Javadb 中将复杂查询创建为视图,然后尝试将视图拖到表单上,但 Netbeans 不允许我删除它(因此我无法自动创建绑定表。我在那个链接上看到我不是只有一个人经历过。

对我有用的解决方案:

在数据库中为您的复杂 SQL 创建视图

entities包中的“Create entity from database”,命名为xxxViewName

  • 确保实体中的字段被标识为键,方法是在其上方添加“@Id”。

在导航器中创建 java 持久性查询:

  • 确保表单设计可见,然后在导航器中右键单击“其他组件”,然后选择“从调色板添加”>“Java 持久性”>“查询”

  • 配置查询:不要使用通常的“show xxxViewName”(因为 JPA 不支持显示而失败)。使用 Select w from xxxViewName w"

在导航器中创建java持久化结果列表:

  • 类似于创建查询。请务必将 List 的类型参数设置为

将您的 JTable 绑定到列表。

【讨论】:

    猜你喜欢
    • 2015-06-19
    • 2013-12-10
    • 1970-01-01
    • 2011-07-13
    • 2023-03-18
    • 1970-01-01
    • 2020-04-18
    • 2013-08-18
    • 1970-01-01
    相关资源
    最近更新 更多