使用 sql 查询在 hibernate 中创建新的对象实例

2024-03-10

我正在尝试使用查询在 hibernate 中创建一个对象,然后该对象将被保存回表示该类的表中。

hbm.xml 文件摘录:

<class name="MyClass" table="MY_TABLE">
<id column="ID" name="ID">
   <generator class="sequence">
    <param name="sequence">MY_SEQ</param>
   </generator>
</id>
  <property column="VAL" name="val" type="string"/>
</class>

<sql-query name="myQuery">
  <return class="MyClass"/>
  SELECT MY_SEQ.nextval ID, 'something' VAL from DUAL
</sql-query>

测试用例的代码片段:

MyClass myClass = (MyClass) session.getNamedQuery("myQuery").list().get(0);
Transaction t = session.beginTransaction();
session.save(myClass);
t.commit();

我的目标是表 MY_TABLE 中现在应该有一条新记录,但插入没有发生,我认为这是由于 Hibernate 不知道该实例尚未持久化在数据库中。

我尝试将查询更改为:

SELECT NULL ID, 'something' VAL from DUAL

但这会导致 Hibernate 无法实例化对象。

那么,我如何从与该类的持久实例无关的查询创建一个新的对象实例,并使用它来创建一个持久实例?


Update:我测试了下面建议的方法,但无法让它适用于这个特定的场景,Hibernate 希望您为所有属性选择列,而我们绝对不需要 id。然而,使用一个ResultTransformer做了工作:

16.1.5。返回非托管实体 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html#d0e13904

可以申请一个ResultTransformer到本机 SQL 查询,允许它返回 非管理实体。

sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
        .setResultTransformer(Transformers.aliasToBean(CatDTO.class))

该查询指定:

  • SQL 查询字符串
  • 结果转换器

上面的查询将返回一个列表 已实例化的 CatDTO 注入 NAME 的值和 BIRTHNAME 成其对应的 属性或字段。

该文档提到返回非托管实体,但它也适用于实体(没有理由它不起作用),我可以persist瞬态实体成功。

See also

  • Hibernate 3.2:HQL 和 SQL 的转换器 http://relation.to/2133.lace

为了清楚起见,我将保留最初的答案。


也许以下内容会有所帮助:

16.1.2。实体查询 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html#d0e13696

上述查询都是关于 基本上返回标量值 从返回“原始”值 结果集。下面展示了如何 从本机 sql 获取实体对象 查询通过addEntity().

sess.createSQLQuery("SELECT * FROM CATS").addEntity(Cat.class);
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);

该查询指定:

  • SQL 查询字符串
  • 查询返回的实体

假设 Cat 被映射为一个类 列 ID、NAME 和 生日 上述查询都将 返回一个列表,其中每个元素都是 猫实体。

如果实体被映射为 与另一个实体的多对一 还需要返回此时 执行本机查询,否则 数据库特定的“未找到列” 将会发生错误。额外的 列将自动返回 当使用 * 符号时,但是我们 更喜欢明确如 以下是多对一的示例 一只狗:

sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE, DOG_ID FROM CATS").addEntity(Cat.class);

这将允许cat.getDog()到 功能正常。

但我认为如果你想保存它并希望 Hibernate 执行插入,你不应该设置 ID。

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

使用 sql 查询在 hibernate 中创建新的对象实例 的相关文章

  • 编写潜在并发问题的证明

    我正在阅读 Java 并发实践 并尝试编写一段代码来表明第 3 5 1 章中作为示例提供的类确实会引入问题 public class Holder public int n public Holder int n this n n publ
  • 在 Java 构建过程中更改常量的最佳方法

    我继承了一个在 Tomcat 下运行的 Java 应用程序 servlet 由于历史原因 根据应用程序的部署位置 本质上是品牌问题 代码具有不同的 外观和感觉 选项 有几个常量控制这个品牌过程 它们具有不同的功能 不应压缩为单个常量 即 B
  • Spring Boot“没有可用消息”错误(状态 = 404),

    我正在使用带有嵌入式 Tomcat 的 Spring Boot 当它启动时 它会登录到控制台 s w s m m a RequestMappingHandlerMapping 将 home 映射到公共 java lang String co
  • Spring data Jpa实体不受管理调用刷新时出现异常

    我有一个数据库代码 jar 我在不同的应用程序中使用它来访问数据库 我在用spring data jpa 我需要调用刷新来检查来自其他应用程序的数据库行的更改 这里我如何实现它 我的StudentRepository界面 public in
  • getAnnotations() 为空

    我想在我的应用程序中使用注释 因此 我为注释创建了 hello world 如下示例 public class HelloAnnotation Foo bar Hello World public String str public sta
  • Android - Firebase - 保存新数据而不覆盖旧数据

    创建此问题是因为我之前的问题包含 2 个问题 而不是将其缩小到 1 Aim 用户将能够存储新数据而不会覆盖之前提交的数据 描述 目前 当用户输入新报告时 事件报告节点中的用户事件报告数据将被覆盖 用户发送的旧事件报告中的数据应与新数据一起保
  • JAXB、Marshal 的问题 - 无法封送类型“java.lang.String”

    当我运行 marshal 操作时 出现以下错误 javax xml bind MarshalException with linked exception com sun istack internal SAXException2 unab
  • Simplify-Ja​​va (by hgoebl) 减少点列表大小始终为 2 的问题

    我正在尝试实现减少算法https github com hgoebl simplify java https github com hgoebl simplify java 我查看了他的测试代码 并试图找出我认为正确的逻辑 我正在列出一份清
  • Spring Boot 是否支持服务器名称指示(SNI)?

    Spring Boot 是否支持服务器名称指示 SNI 具体来说 运行嵌入式 Tomcat 服务器并打包为可执行 jar 文件的 Spring Boot 2 2 2 RELEASE 应用程序是否可以根据传入请求的主机名支持多个 SSL 证书
  • Java 中的逻辑回归

    我们需要用 Java 进行逻辑回归 我们在 Python 中使用了这段代码http blog smellthedata com 2009 06 python logistic regression with l2 html http blo
  • java.util.Objects 与Optional 哪个更可取?

    The java util Objects http download java net java jdk9 docs api java util Objects html类通过许多新方法进行了扩展 对象 requireNonNullEls
  • 将 JAR 文件打包为 WAR 文件

    我有一系列依赖的Java项目 我想将它们打包成一个 JAR 文件 以便在我的 WAR 文件中使用 这些项目依赖于大量的外部库和项目 如log4j apache commons等 我选择 Eclipse 中的所有项目并导出为 JAR 文件 然
  • 带有 CONTAINS 查询的PreparedStatement

    我有一个查询需要连续运行 28000 次 所以我认为使用准备好的语句可能是一个聪明的主意 这是我的查询 String requestWithFirstName SELECT SE ELEMENT ID SE LASTNAME SE FIRS
  • 如何在 Spring Boot 中访问 application.properties 文件中定义的值

    我想访问中提供的值application properties e g logging level org springframework web DEBUG logging level org hibernate ERROR loggin
  • 如何在 groovy 中将输出重定向到 stderr?

    我正在寻找一种将 groovy 脚本中的输出重定向到 stderr 的方法 catch Exception e println Want this to go to stderr 就在我的脑海中 你不能做一些自我接线吗 def printE
  • java POI XSSF 公式评估器

    我在保存新的 Excel 文件时遇到问题 我希望当它被保存时 公式会自行计算 但目前它只是返回 Excel 文件中的一个字符串 公式是正确的 我不知道到底要得到FormulaEvaluator上班 这是我输入返回字符串的公式的地方 data
  • 如何将 JAVAX-WS 端点绑定更改为 SOAP 1.2?

    我正在使用发布测试 WS 实现Endpoint publish 用于在 Visual Studio 中使用 根据文档 http metro java net nonav 1 2 docs endpoint html默认的 SOAP 绑定是1
  • 使用服务器 java api 从 jasperserver 存储库检索资源

    我正在尝试使用其 java API 从 Jasperserver 存储库检索资源 根据jasper 报表服务器终极指南 https community jaspersoft com documentation jasperreports s
  • Android 布局崩溃

    I use a XWalkView https crosswalk project org 加载网页和视频查看器 https github com Bilibili ijkplayer在我的应用程序中播放实时视频 我希望 IjkVideoV
  • OkHttp javax.net.ssl.SSLPeerUnverifiedException:主机名domain.com未验证

    我几天来一直在努力让它发挥作用 我正在尝试通过以下方式连接到我的服务器https带有自签名证书 我认为现在没有任何页面或示例是我未读过的 我做了什么 按照本教程创建了 bks 密钥库 http blog crazybob org 2010

随机推荐

  • pymssql Windows 身份验证

    pymssql模块用于支持windows身份验证 现在看来并非如此 尽管在某些地方它仍然表明它应该有效 我一直无法找到这个问题的明确答案 也找不到解决方案 最相关的链接 https groups google com forum topic
  • EF:有关跨数据库关系的数据库设计问题

    Summary 我目前正在制作一个 非常简单 多租户 Web 应用程序的原型 其中用户 存储在数据库中 1 可以注册到不同的租户 存储在数据库中per租户 相同的数据库模式 我认为这种架构适用于许多多租户解决方案 遗憾的是 我发现实体框架不
  • 使用 requestSpotInstances 的 TagSpecifications 使用 aws-sdk 的 UnexpectedParameter

    我正在尝试向我的 AWS Spot 请求添加标签 但它已经归还给我了 UnexpectedParameter Unexpected key TagSpecifications found in params LaunchSpecificat
  • Delphi 泛型类可以从其类参数派生吗?

    我一直在尝试定义一个通用的 可继承的 TSingleton 类 这是我正在进行的工作 TSingleton
  • 在 C# 中解析 JSON 数据

    我有一个 JSON 数据如下 id 367501354973 from name Bret Taylor id 220439 由 IDictionary String Object 的对象 结果 返回 在我的 C 代码中 我不确定你是如何解
  • Perl:命名参数验证最佳实践

    我在类方法调用中使用命名参数 想知道是否有最佳实践来确保不传递未知参数 这就是我正在做的 sub classmethod my self shift my args param1 gt default1 param2 gt default2
  • fft后如何在C上均衡

    首先感谢您花时间回答 我的问题是下一个 我尝试使用 fft 快速傅立叶变换 在 C 上构建均衡器 因为现在我能够在向量 音频样本 上正确应用 fft 对其进行归一化 然后应用逆 fft 因为这里一切都好 但是当我尝试修改 fft 的结果 以
  • 如何从组件内的单点捕获 vuejs 错误

    我有一个使用大量 axios 的组件then catch 在捕获中我总是抛出console error like axios get then catch error gt console error 还有其他一些地方我也抛出错误 我正在寻
  • LabelEncoder指定DataFrame中的类

    我正在将 LabelEncoder 应用于 pandas DataFrame df Feat1 Feat2 Feat3 Feat4 Feat5 A A A A E B B C C E C D C C E D A C D E 我将标签编码器应
  • 如何解析 Netlogo 中的字符串?

    Context 对于我的模型 我希望有一个输入 用户可以在其中输入一系列值 E g 我希望从上面显示的输入中得到一个由五个数字组成的列表 例如 0 5 0 2 0 0 2 0 5 这样我就可以使用他们输入的数字进行一些计算 问题 不幸的是
  • 设置 SQL_MODE="NO_AUTO_VALUE_ON_ZERO";给出一个错误

    我的 mysql 数据库有问题 我无法从我的朋友那里导入数据库 我需要一些帮助 SET SQL MODE NO AUTO VALUE ON ZERO SET time zone 00 00 ERROR 声明的开头出人意料 靠近位置 0 的
  • GUID 可以多短?

    我知道标准 GUID 它们可以变得更短吗 其背后的理论是什么 Greg Dean 的答案是正确的 但为了了解 GUID 是如何生成的以及为什么不应该缩短它 我强烈建议您阅读下面的文章 新旧事物 GUID 是全局唯一的 但 GUID 的子字符
  • 如何扩展从npm包导入的vue组件?

    如果您有通过 Node 安装的 vue 组件 node modules vendor somecomponent vue 有什么方法可以修改 扩展该组件的模板 方法吗 Update 尝试下面的示例后 我遇到了这个问题 我在用https gi
  • VB.NET:哪个 As 子句与带有 Option Strict On 的匿名类型一起使用?

    考虑始终声明的要求Option Strict On 我们总是需要用As关键词 匿名类型的类型是什么 例子 Dim product As New With Key Name paperclips Price 1 29 接下来会发生什么As 尝
  • 使用 .NET Framework 或 Windows API 检测 Windows 11

    在 NET Framework 中 获取可以使用的操作系统版本Environment OSVersion与Major and Minor告诉您 Windows 版本的值 即 6 1 Windows 7 10 0 Windows 10 尽管
  • 在不创建主题的情况下更改 emacs 中特定文本的颜色

    是否可以选择您正在编辑的一段文本并更改其颜色 我知道可以创建一个颜色主题来为某些类型的文本着色 例如某种编程语言中的着色函数 但是是否可以对特定 emacs 中的选定文本片段进行一次性颜色更改不创建主题的文档 提前致谢 在任何情况下 主题都
  • 无法访问对象原型上的方法

    我可以创建一个Cat对象并在其原型上设置一个方法来打印猫的名字 var log function message var results result results append p message p function Cat name
  • 从 OnActionExecuting 重定向到外部 url?

    我需要从 OnActionExecuting 方法重定向到外部网址 比方说 www google com 现在我正在使用这样的东西 public override void OnActionExecuting ActionExecuting
  • 如何使用变换原点让 svg 元素从中心旋转? [复制]

    这个问题在这里已经有答案了 我正在尝试对 svg 矩形元素进行非常简单的旋转 我希望这个元素相对于它的中心旋转 我试图使用transform origin属性来实现这一点 参见代码片段 尽管尝试使用 center 或 50 从中心旋转 但它
  • 使用 sql 查询在 hibernate 中创建新的对象实例

    我正在尝试使用查询在 hibernate 中创建一个对象 然后该对象将被保存回表示该类的表中 hbm xml 文件摘录