gpt4 book ai didi

NHibernate Criteria 使用带有 in 子句的子字符串投影

转载 作者:行者123 更新时间:2023-12-03 17:20:48 24 4
gpt4 key购买 nike

我在 Oracle 中有一个场景,我需要将列的子字符串部分与值列表相匹配。我使用 sqlfunction projection 在所需列上应用子字符串,并将该投影添加为 In Clause Restriction 的一部分。以下是我为此编写的简化标准。

ICriteria criteriaQuery = session.CreateCriteria<Meeting>()
.Add(Restrictions.In(
Projections.SqlFunction(
"substring",
NHibernateUtil.String,
Projections.Property("Code"),
Projections.Constant(1),
Projections.Constant(3)),
new string[] { "D01", "D02" }))
.Add(Restrictions.In("TypeId", meetingTypes));

我遇到的问题是生成的 SQL 是错误的,其中为该语句注册的参数数量多于该语句实际使用的参数数量,并且一些参数即使没有使用也会重复。这会导致语句失败并显示消息 - ORA-01036:非法变量名称/编号。生成的查询

SELECT this_.Meeting_id as Meeting1_0_2_, .....  
WHERE substr(this_.Mcs_Main, :p0, :p1) in (:p2, :p3)
and this_.Meeting_Type_Id in (:p4, :p5);
:p0 = 1, :p1 = 3, :p2 = 1, :p3 = 3, :p4 = 'D02', :p5 = 'D03', :p6 = 101, :p7 = 102

p2 和 p3 再次生成并且是 p0、p1 的副本,因此整个查询失败。

我能够通过使用公式映射新属性来临时解决此问题,但我认为这不是正确的方法,因为即使我不需要评估子字符串,公式也会始终执行。

关于在结合使用 In 子句时投影是否正常工作的任何建议,当我使用 Equal Restriction 而不是 In 时,相同的投影工作正常。

最佳答案

此错误在 3.0.0.GA 版本中已修复。

关于NHibernate Criteria 使用带有 in 子句的子字符串投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1729938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com