我的Java应用程序使用JPA进行对象持久化.业务域非常简单(只有三个类是持久的,每个类有3-5个属性).查询也很简单.问题是我应该使用哪种方法:JPQL或Criteria API?
我使用JPA 2.0的CriteriaBuilder构建动态查询有点困难.
我猜有一个很常见的用例:用户提供任意数量的搜索参数X和/或连接:如:
select e from Foo where (name = X1 or name = X2 .. or name = Xn )
Run Code Online (Sandbox Code Playgroud)
方法或CriteriaBuilder不是动态的:
谓词或(谓词......限制)
想法?样品?
Criteria比使用JPQL或原始SQL有一些优势,如本答案中所述:类型安全; 重构友好; 减少对字符串的依赖(但仍有一些).还有一个非常大的缺点:它们不那么可读,而且简直太丑了.是否有(非JPA)Java API用于访问类型安全且可读的关系数据库?