我想为以下本机sql创建创建条件。
不幸的是,我两次使用createCriteria时遇到重复的关联路径错误。当我尝试使用Restrictions.sqlRestriction时。它无法提供我想要的SQL。
尝试1:创建条件-重复的关联路径
Criteria criteria = getSession().createCriteria( Company.class );
criteria.createAlias( "customerCategories", "c1" );
criteria.add( Restrictions.in( "c1.customerCategory.customerCategoryId",
company.getBaseCustomerCategoryId() ) );
criteria.createAlias( "customerCategories", "c2" );
criteria.add( Restrictions.in( "c2.customerCategory.customerCategoryId",
company.getPromoCustomerCategoryId() ) );
尝试2:创建SQL限制-ORA-00920:由于“ where”,关系运算符无效
Criteria criteria = getSession().createCriteria( Company.class );
criteria.add( Restrictions.sqlRestriction(
"INNER JOIN Company_Customercategory a on {alias}.companyId = a.companyId and a.CUSTOMERCATEGORYID = ?",
company.getBaseCustomerCategoryId(), LongType.INSTANCE ) );
criteria.add( Restrictions.sqlRestriction(
"1=1 INNER JOIN Company_Customercategory b on {alias}.companyId = b.companyId
and b.CUSTOMERCATEGORYID = ?",
company.getPromoCustomerCategoryId(), LongType.INSTANCE) );
结果错误
select this_.* from Companies this_ where
INNER JOIN Company_Customercategory a
on this_.companyId = a.companyId
and a.CUSTOMERCATEGORYID = 1
and 1=1 INNER JOIN Company_Customercategory b
on this_.companyId = b.companyId
and b.CUSTOMERCATEGORYID = 6
预期的SQL
select * from companies c
inner join Company_Customercategory a
on c.companyId = a.companyId
and a.CUSTOMERCATEGORYID = 1
inner JOIN Company_Customercategory b
on a.companyId = b.companyId
and b.CUSTOMERCATEGORYID = 6
感谢你的帮助。谢谢。
关于2005年打开的问题,还有一个旧的Hibernate错误HHH-879org.hibernate.QueryException: duplicate association path
仍在打开…
其他问题已解决,但未解决HHH-7882
因此,选项1)不太适合。
但是,在上述错误的意见的有用 的解决方法 是使用提及exists
因此,请使用两次sqlRestriction
,exists
并使用一个相关的子查询来过滤属性类别。您将获得唯一的 企业 连接到这两个类别。
crit.add( Restrictions.sqlRestriction(
"exists (select null from Company_Customercategory a where {alias}.company_Id = a.company_Id and a.CUSTOMERCATEGORYID = ?)",
1, IntegerType.INSTANCE ) );
crit.add( Restrictions.sqlRestriction(
"exists (select null from Company_Customercategory a where {alias}.company_Id = a.company_Id and a.CUSTOMERCATEGORYID = ?)",
6, IntegerType.INSTANCE ) );
这导致以下查询提供正确的结果
select this_.COMPANY_ID as COMPANY_ID1_2_0_, this_.COMPANY_NAME as COMPANY_NAME2_2_0_
from COMPANIES this_
where exists (select null from Company_Customercategory a
where this_.company_Id = a.company_Id and a.CUSTOMERCATEGORYID = ?) and
exists (select null from Company_Customercategory a
where this_.company_Id = a.company_Id and a.CUSTOMERCATEGORYID = ?)
问题内容: 我想为以下本机sql创建创建条件。 不幸的是,我两次使用createCriteria时遇到重复的关联路径错误。当我尝试使用Restrictions.sqlRestriction时。它无法提供我想要的SQL。 尝试1:创建条件-重复的关联路径 尝试2:创建SQL限制-ORA-00920:由于“ where”,关系运算符无效 结果错误 预期的SQL 感谢你的帮助。谢谢。 问题答案: 关于2
有没有办法通过两个列表< code>join两个< code > Spark data frame 具有不同的列名? 我知道如果他们在列表中有相同的名字,我可以做以下事情: 或者,如果我知道不同的列名,我可以这样做: 由于我的方法需要2个列表的输入,这些列表指定哪些列将用于每个DF的,因此我想知道Scala Spark是否有办法做到这一点? 页(page的缩写)我在寻找类似python的东西< c
问题内容: 我有2张桌子。为了简化: 表1,用户: userId int,userName nvarchar(50) 表2消息: msgId int,msgFrom int,msgTo int … msg1和msg2都包含userId。现在,我想获取所有消息,但是我想要用户名而不是msgFrom。我知道该怎么办: 一切正常,花花公子。获取用户名而不是msgTo的方法相同。现在的问题是,如何在同一调
例如,计算欧氏距离:。这里,如果或的大小太小/太大,则可能发生下溢/溢出。 解决这一问题的常用方法是用最大的数量级除数。但是,这个解决方案是: 慢(除法慢) 导致一点额外的不准确 所以我想,不除以最大的星等数,让我们把它乘以一个接近的-2的倒数数。这似乎是一个更好的解决办法,因为: 乘法比除法快得多 精度更高,因为乘以2的幂数是精确的 此函数应返回一个规范化的和,两者都是2的幂数,其中接近于,而是
问题内容: 我有一个python脚本正在查询共享Linux主机上的MySQL服务器。出于某种原因,对MySQL的查询通常会返回“服务器已消失”错误: 如果此后立即再次尝试查询,通常会成功。因此,我想知道python中是否有一种明智的方法来尝试执行查询,如果失败,则可以重试固定次数的尝试。可能我想让它尝试5次再完全放弃。 这是我的代码类型: 显然,我可以通过在except子句中进行另一次尝试来做到这
我当前的代码: 但是我要一个java。lang.IllegalArgumentException。 我需要的是在用户表中显示一列。 类似于但是帐户实体没有只有User实体才有的getName()。 *更新 这就是错误所在 Java语言lang.IllegalArgumentException:在EntityManager中创建查询时发生异常:异常描述:语法错误分析查询[SELECT a Accou