Hibernate多态查询

2024-04-01

我有两个类,Person 和 Company,它们派生自另一个类 Contact。它们在两个表(个人和公司)中以多态形式表示。简化的类如下所示:

public abstract class Contact {

  Integer id;

  public abstract String getDisplayName();

}

public class Person extends Contact {

  String firstName;
  String lastName;

  public String getDisplayName() {
    return firstName + " " + lastName;
  }

}

public class Company extends Contact {

  String name;

  public String getDisplayName() {
    return name;
  }

}

问题是我需要进行查询以查找包含特定字符串的 displayName 的所有联系人。我无法使用 displayName 进行查询,因为它不属于任何一个表。关于如何执行此查询有什么想法吗?


因为您在 Java 类中进行串联,所以 Hibernate 无法真正帮助您完成此操作,抱歉。它根本看不到您在此方法中所做的事情,因为它实际上与持久性根本无关。

解决方案取决于您如何映射这些类的继承:

如果是 table-per-hierarchy 可以使用这种方法:为条件查询编写 SQL where 子句,然后使用 case 语句:

s.createCriteria(Contact.class)
 .add(Restrictions.sqlRestriction("? = case when type='Person' then firstName || ' '|| lastName else name end"))
 .list();

如果它是每个具体子类的表,那么您最好编写两个查询(因为这就是 Hibernate 无论如何都会做的)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate多态查询 的相关文章

随机推荐

  • 在模态 JDialog 之外时光标不正确?

    使用方法时setCursor 要更改组件使用的光标 所有组件都可以正常工作 包括JFrame and JDialog 这里的问题在于modal JDialog 当鼠标处于inside对话框中 光标显示在右侧 但是 当鼠标移动时outside
  • 使用 AngularJS 和 ngResource 调用外部 api

    我们目前正在开发一个小型 AngularJS 项目 并从前端开始 所以纯 HTML 和 JavaScript 然而 我们需要使用 ngResource 进行一些 API 调用 目前我们正在使用canned http github com s
  • 将 Google Apps API 密钥与距离矩阵结合使用

    我正在使用谷歌距离矩阵 API https developers google com maps documentation distancematrix 并且文档告诉我我需要一个 API 密钥 但我可以在没有 API 密钥的情况下使用它
  • 当 AngularJS 中的响应为 304(未修改)时,$http 返回错误

    我正在使用 angularjs http 向 asp net web api 发出请求 服务器上的 Web API 通过 ETag 管理缓存 如果我的响应状态代码是 304 那么它会进入错误函数 而不是成功函数 我不明白 AngularJS
  • 在 DataGrid 工具栏的弹出组件 Material-UI 中添加自定义样式

    我正在创建一个自定义Data Grid Toolbar通过修改现有组件Grid Toolbar组件来自材质 UI https v4 mui com Here https v4 mui com components data grid fil
  • WWW::Mechanize::Timed https 超时不起作用

    所以我在互联网上研究了这个问题 至少我是这么认为的 我正在尝试设置一个alarm超时 60 秒get 但它不会被捕获 并且会运行超过 60 秒 而且每当 www mechanized timed 构造函数达到默认超时 180 秒 时 我都会
  • Discord.py 机器人没有响应

    我对discord py相对较新 我正在制作一个机器人 但是使用某些命令或我放置的东西 机器人停止响应命令 当它以前工作时 我不知道如何修复它 机器人开启 但不响应任何命令 这是新的区域 import os import discord f
  • C#列表覆盖问题[重复]

    这个问题在这里已经有答案了 我有一些代码如下所示 用于写入 a 的值gridview到如图所示的列表 该代码确实获得了正确的值 但是当网格的第二行添加到列表中时 它会覆盖列表的第一行 有人知道为什么会发生这种情况吗 C Code List
  • 如何在 SQL 中识别连续日期组?

    我正在尝试编写一个函数来识别日期组并测量该组的大小 到目前为止 我一直在 Python 中按程序执行此操作 但我想将其移至 SQL 中 例如 列表 Bill 01 01 2011 Bill 02 01 2011 Bill 03 01 201
  • 角度标记错误

    我突然得到这个 它不允许我正确使用我的传单地图 每次我单击地图时 都会将一个标记添加到相同的坐标 当我尝试使用函数删除标记时 它会清空标记数组 但标记在地图上仍然可见 这是怎么回事 Error parse syntax Syntax Err
  • Django 预关闭钩子关闭挂起的 pymongo 连接

    我在 Django 项目中使用 pymongo 最近我开始遇到一个问题 在退出主 Django 进程 即使通过管理命令 时 pymongo 连接将挂起 并且该进程永远不会退出 显然 堆栈中的某个地方出了问题 但目前最好的解决方案似乎是在 D
  • @UsePipes(ValidationPipe) 不适用于泛型(抽象控制器)

    我正在使用构建 APINest js和MySQL 由于敏捷性和 DRY 原则 我正在创建一个 OOP 结构 它为给定实体 来自 TypeORM 设置所有基本 CRUD 端点 主要目标是避免为不同的实体编写相同的通用方法 为了实现这一目标 我
  • 有没有办法在 VAR 模型中挑选滞后变量?

    我对每日数据的两个时间序列进行建模 一是注册 二是订阅的终止 我想使用 VAR 模型的两个变量中包含的信息来预测后者varsR 中的包 由于我正在对订阅进行建模 因此我知道终止与前几个月的注册倍数相关 也就是说 5 月 10 日的注册人数激
  • document.execCommand() FontSize(以像素为单位)?

    如何使用以下命令将字体大小更改为 30px 例如 document execCommand This document execCommand fontSize false 30px 不起作用 因为在函数 execCommand 的第三个参
  • 在 Java 中执行身份验证加密的正确方法是什么?

    验证加密要求我们使用一些公认的标准来加密和验证消息 因此 我们对消息进行加密并计算消息的 MAC 以验证它没有被篡改 这个问题 https stackoverflow com questions 992019 java 256 bit ae
  • 如何使用 Xcode 6.3 Beta2 覆盖 Swift 中超类的 setter?

    我的 SuerClass 是UICollectionViewCell它有一个属性 var selected Bool 我的班级是 MyClass UICollectionViewCell func setSelected selected
  • 使用 Capistrano 部署 Rails 5.1 / Webpacker 应用程序

    我有一个 Ubuntu 服务器来部署我的 Rails 项目 在我的 Ubuntu 服务器中 我有 RVM 现在我想使用 Rails 5 1 和 webpacker 部署新项目 为了部署这个项目 我在我的 Ubuntu 服务器中安装了 NVM
  • 如何为 Android 发送库

    我想为 Android 开发一个库 我可以以什么形式运送 jar apk 还是其他 我应该如何做才能让其他开发人员可以在他们的应用程序中使用我的库 如果您的库是纯 Java 代码 则 JAR 就可以了 也许可以用文档等进行压缩 如果您需要资
  • 如何将 SVN 存储库移至新服务器

    我们想要将两台服务器合并在一起 为此 我们需要在 新 服务器上安装 SVN 然后移动我们在 旧 服务器上设置的所有存储库 这是一个容易做的操作吗 可能使用 TortoiseSVN 提供的 重新定位 选项 最好的方法是什么 现在也是重新组织存
  • Hibernate多态查询

    我有两个类 Person 和 Company 它们派生自另一个类 Contact 它们在两个表 个人和公司 中以多态形式表示 简化的类如下所示 public abstract class Contact Integer id public