我正在尝试运行一个查询,检查某些条件是否为真,并返回一个简单的布尔结果作为输出.让它有点棘手的是,其中一个条件是测试是否没有为一组标准返回结果.
我目前正在使用JPA-2.0和hibernate作为我的提供者,由MySQL支持.我已经得到一个在MySQL中运行良好的示例查询,但是当试图让它在JPQL中运行时,它会失败.MySQL查询看起来有点像这样:
Select exists(Select statement with criteria)
or not exists(Select statement with criteria);
Run Code Online (Sandbox Code Playgroud)
我也使用CASE获得了相同的输出,但由于JPQL不支持该语句.
无论如何,当我尝试在JPQL中使用类似的查询时,我得到错误:
"意外结束的子树"
根据我的理解,这意味着查询中缺少某些内容.有谁知道如何解决它?
所以我是一个相对较新的程序员,我还在学习,并遇到了一些问题(如果我的标签稍微偏离,那么道歉).在早期,我有机会阅读一篇文章,讨论将包含大量代码的方法分解为许多较小的,明确命名的方法的调用的优点.总的来说,我觉得这样做的代码看起来更整洁,并且确保单元测试更容易.但是,我对是否将所有这些新方法公开或私有都有些担忧.将它们设为私有似乎是正确的做法,因为其余的代码通常不需要访问这些方法.但是,单元测试私有方法可能会很混乱.这是最好的做法吗?
我现在在做什么:
public class WashingMachine {
public Load wash(Load load) {
// Removes one sock from load
for (ClothingItem item : load.getItems()) {
if (item.getType().equalsIgnoreCase("sock") {
load.removeItem(item);
.. // logic for sending sock to proper dimension
break;
}
}
// rest of logic for cleaning clothes
}
}
Run Code Online (Sandbox Code Playgroud)
变成:
public class WashingMachine {
// Wash a load of laundry
public Load wash(Load load) {
// Removes one sock from load
removeSock(load.getItems());
// rest of logic for cleaning clothes
..
} …Run Code Online (Sandbox Code Playgroud)