ntitle oracle,关于oracle:NHibernate返回错误的SQL查询结果

博客内容讲述了在使用NHibernate进行数据库查询时遇到的一个问题,即查询结果与直接在数据库中执行SQL得到的结果不同。原因是NHibernate在处理具有相同列名的情况时,会默认选择第一个出现的列,导致数据错乱。解决方案是在SELECT语句中为重复列名指定别名。博主指出,虽然这不是NHibernate的错误,但这种行为可能引起混淆,并建议在NHibernate查询中避免列名冲突。
摘要由CSDN通过智能技术生成

我有一个查询,其中包含在select子句中:

d1.id,

d1.title,

d1.original_doc,

d2.id,

d2.title

在from子句中:

left outer join documents d2 on d1.original_doc = d2.id

假设在数据库中我有以下行:

ID TITLE ORIGINAL_DOC

1 Title1

2 Title2 1

对于第一行,NHibernate将返回1,Title1,null,1,Title1,而不是1,Title1,null,null,null。

对于第二行,它将返回2,Title2、1、2,Title2,而不是2,Title2、1、1,Title1。

请注意,第三和第四列不应包含不同的值,因为联接的条件是它们相同。 似乎正在发生的事情是,我连接的是与d2相同的d1行,而不是条件所定义的行。

现在很奇怪的部分:如果我打开.ShowSql()并将查询复制粘贴到Oracle Toad中,它实际上会返回正确的结果!

我通过使用var data = session.CreateSQLQuery(selectQuery).List()获得NHibernate中的结果集

任何人有任何想法吗?

我确切地将此报告为错误,但这不是错误。 NH使用列名在内部管理结果。 如果它们具有相同的名称,它将选择第一个。 您需要在select子句中为其赋予唯一的名称:

SELECT

d1.id as id1,

d1.title as title1,

d1.original_doc as original_doc1,

d2.id as id2,

d2.title as title2

谢谢,做到了!对于NHibernate来说,这似乎很弱,它返回与面对完全相同的查询时DB返回的结果不同的结果。我什至不介意出错,但是偷偷地返回错误的结果确实很糟糕。这根本不是必要的限制。 :/当您考虑它时,这显然是一个错误。

我也是这样。您可以根据需要在jira中添加一些评论。添加一个新的"功能增强"类型可能会更好。只是对吉拉有礼貌,那里有些人很敏感...

+1报告错误ID,这使我得出结论,该错误对nhibernate而言不是"错误",我应该在查询中使用相同的拼写来重命名列名称。

如何忍受这个"不是虫子"?我的情况是,用户以sql输入,他想要正确的结果。我应该跳过使用nhibernate还是更好的方法?现在有方法可以覆盖此实现吗?

@ user1785960:好吧,我不确定SQL是否是合适的接口。但是,如果确实是SQL,而不是HQL,则不需要NHibernate。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值