JPA表达式连接两个以上的列
我用下面的语句连接两列,效果很好JPA表达式连接两个以上的列,jpa,eclipselink,jpa-2.0,criteria,criteria-api,Jpa,Eclipselink,Jpa 2.0,Criteria,Criteria Api,我用下面的语句连接两列,效果很好 Expression<String> stringConcat = cb.concat(cb.concat(root.get(Employee_.userId), " # "), joinDept.get(Employee_.empName)); select emp.user_id|| ' # '|| dept.emp_name|| ' # '||
Expression<String> stringConcat =
cb.concat(cb.concat(root.get(Employee_.userId), " # "),
joinDept.get(Employee_.empName));
select emp.user_id|| ' # '|| dept.emp_name|| ' # '|| hist.user_name from ..
我想再连接一列,SQL是
select emp.user_id|| ' # '|| dept.emp_name|| ' # '|| hist.user_name from ..
不确定如何使用CriteriaBuilder和表达式在JPA API中添加其他列
select emp.user_id|| ' # '|| dept.emp_name|| ' # '|| hist.user_name from ..
编辑1
select emp.user_id|| ' # '|| dept.emp_name|| ' # '|| hist.user_name from ..
我正在寻找使用多列的连接,而标记为重复的答案无助于解决问题,最重要的是,此问题已标记,并寻求解决连接问题的解决方案涉及JPA标准API,当然不涉及JPQL。您基本上可以包装
concat(…)
相互转换,或使用如下方法(假设要在列之间使用相同的分隔符字符串):
select emp.user_id|| ' # '|| dept.emp_name|| ' # '|| hist.user_name from ..
private-CriteriaBuilder-CriteriaBuilder=/**/
//注意“表达式”前的三个点,它们不是装饰;-)
专用表达式concat(字符串分隔符、表达式…表达式){
表达式结果=null;
for(int i=0;i
这里是一个比提供的更简单的多concat函数实现
select emp.user_id|| ' # '|| dept.emp_name|| ' # '|| hist.user_name from ..
公共静态表达式concat(CriteriaBuilder cb,字符串分隔符,
表达……表达){
//如果未提供表达式,则返回空字符串
if(expressions.length==0){
返回cb.literal(“”);
}
//从第一个表达式开始
表达式结果=表达式[0];
//然后连接后续表达式(从第二个表达式开始)
for(int i=1;i
好处:当在参数中没有任何表达式的情况下调用时,它返回一个空字符串表达式,而不是纯
null
。在这种情况下,它可能返回cb.nullLiteral(String.class)
。@tobisliefke您能解释一下如何使用表达式的多列串联吗?@tobisliefke我建议请删除问题中的重复标记。不是重复,因为链接答案引用的是JPQL,而不是标准API方法。所以“是”分隔符保持不变。我将尝试这种方法。我得到表达式的编译错误。长度什么错误?你忘了这三个点了吗?您是否使用Java<1.5.x?非常好,这解决了问题。非常感谢。事实上,他们没有为concat自己编写这个功能,concat是一个可以拥有所需参数的函数,这是非常可悲的。
select emp.user_id|| ' # '|| dept.emp_name|| ' # '|| hist.user_name from ..