我习惯在Hibernate中使用Criteria API,只是看看JPA 2.0中的Criteria如何工作.
我最喜欢的Hibernate标准是我们必须轻松地与Criterions合作.
JPA Criteria对我来说似乎相当沉重,并不像Hibernate Criteria那样流畅.对我来说,与Hibernate相比的一个主要好处似乎是使用了元模型(Entity_.java类),但是由于你必须维护2个类,或者添加一个注释处理器(尽管很容易),它仍然有点沉重.与maven插件集成)
我已经阅读了一篇关于SpringSource的博客,该博客允许使用"JPA Predicates"降低编写的复杂性,并且有点像Hibernate中的Criterions.
Querydsl项目似乎很有趣.
http://blog.springsource.com/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/
只是想知道,对于那些使用JPA2的人来说,你使用的是Criteria API还是对你来说有点太重了?
对于熟悉Hibernate Criteria并且现在使用JPA Criteria的人来说,您最喜欢Dowhich方法,为什么?
您是否考虑使用或使用Querydsl或Spring Specifications over JPA2等框架来构建查询谓词?您认为这些框架是否足够成熟以至于被采用?
是否可以使用GORM标准执行"in"标准.我正在寻找以下SQL的等价物
select * from Person where age in (20,21,22);
Run Code Online (Sandbox Code Playgroud)
如果有可能,我猜语法将是这样的:
def results = Person.withCriteria {
in "age", [20, 21, 22]
}
Run Code Online (Sandbox Code Playgroud) 我目前正在使用条件来检索用户的详细信息,但在尝试使用正确的用户查询详细信息对象时,我得到了ClassCastException.
我的标准代码;
Criteria criteria = sess.createCriteria(UserDetails.class)
criteria.add(Restrictions.eq("user.id", user.id));
Run Code Online (Sandbox Code Playgroud)
我也试过用;
Criteria criteria = sess.createCriteria(UserDetails.class)
Criteria subCriteria = criteria.createCriteria("user");
subCriteria.add(Restrictions.eq("id", user.id));
Run Code Online (Sandbox Code Playgroud)
两者都给我ClassCastException.我知道我可以通过让用户实现Serializable来轻松解决它,但还有其他解决方案吗?
我在Java,Answer和Collaborator中有2个POJO类,处于多对多关系中.
class Answer {
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "ANSWERS_COLLABORATORS", joinColumns = { @JoinColumn(name = "aid") }, inverseJoinColumns = { @JoinColumn(name = "cid") })
private Set<Collaborator> collaborators = new HashSet<Collaborator>(0);
}
Run Code Online (Sandbox Code Playgroud)
类Answer有一套Collaborator,但是Collaborator不保留一套Answer.我需要从Hibernate做的CriteriaQuery是找到id给出的答案的协作者.
我已经使用结果转换器在Hibernate Criteria(org.hibernate.Criteria)中完成了这个,但是在使用时我遇到了困难CriteriaQuery,因为我没有给出连接的答案列表.
您好我想使用条件编写查询:必须使用条件创建以下查询:
"从S2中选择Distinct(s2Taxper),其中s2Tc ='601'和s2Txcd!=''"
提前致谢
我有样柱提交表格ID,Name,Code等性质.我的要求是根据提到的属性搜索记录并返回一个分页集.
这是我正在寻找的伪代码:
searchSubmission(searchFilter sf,pageIndex,noOfRecords) {
query = 'from submisssion where code=sf.code or id=sf.id order by id start_from (pageIndex*noOfRecords) limit noOfRecords'
return result();
}
Run Code Online (Sandbox Code Playgroud)
似乎有许多选项,例如CriteriaBuilder,NamedQuery等等.在这种情况下哪个是最有效的?
对于这个问题,我们希望避免编写特殊查询,因为查询必须在多个数据库之间不同.仅使用休眠标准,我们希望能够转义特殊字符.
这种情况是需要能够转义特殊字符的原因:
假设我们在数据库中有表'foo'.表'foo'只包含1个字段,称为'name'."名称"字段可以包含在数据库中可能被视为特殊的字符.这种名称的两个例子是'name_1'和'name%1'."_"和"%"都是特殊字符,至少在Oracle中是这样.如果用户想要在数据库中输入这些示例之后搜索其中一个示例,则可能会出现问题.
criterion = Restrictions.ilike("name", searchValue, MatchMode.ANYWHERE);
return findByCriteria(null, criterion);
Run Code Online (Sandbox Code Playgroud)
在此代码中,'searchValue'是用户为应用程序提供的用于搜索的值.如果用户想要搜索'%',则将返回用户数据库中的每个'foo'条目.这是因为'%'字符表示字符串匹配的"任意数量的字符"通配符,而hibernate生成的SQL代码将如下所示:
select * from foo where name like '%'
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉hibernate逃避某些字符,或创建一个非数据库类型特定的解决方法?
假设我有以下课程:
class A {
B getB();
C getC();
}
class B {
String getFoo();
}
class C {
int getBar();
}
Run Code Online (Sandbox Code Playgroud)
我想在A上过滤标准,在不同的子类属性上有两个过滤器,例如:
Criteria criteriaA = session.createCriteria(A.class);
Criteria criteriaB = criteriaA.createCriteria("b").add(Restrictions.eq("foo", "Something"));
Criteria criteriaC = criteriaA.createCriteria("c").add(Restrictions.eq("bar", 0));
Run Code Online (Sandbox Code Playgroud)
我想要做的是使用"或"子句组合criteriaB和criteriaC,如:
//this does not work
criteriaA.add(Restrictions.disjunction().add(criteriaB).add(criteriaC));
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?我在这里绊倒了一些API.
有人可以建议我如何使用JPA Criteria构建器API构建以下查询吗?
SELECT id,status,created_at from transactions where status='1'
and currency='USD' and appId='123' order by id
Run Code Online (Sandbox Code Playgroud)
如果我能找到一个基于作为Map<String,String>使用元模型类或任何其他方式给出的参数动态创建的解决方案,那就更好了.
我有一个名为Gift的表,它与一个名为ClickThrough的表有一对多的关系 - 表示特定Gift被点击的次数.我需要查询按ClickThrough计数排序的所有Gift对象.我不需要返回ClickThrough计数,因为我不需要做任何事情,我只想将它用于订购目的.
我需要查询直接返回一个Gift对象列表,只是按ClickThrough计数排序.如何使用Criteria API执行此操作?我可以在这里找到很多关于类似信息的文档,但没有什么比我需要的更多.
criteria ×10
hibernate ×8
java ×8
jpa ×3
jpa-2.0 ×2
builder ×1
database ×1
escaping ×1
grails ×1
grails-orm ×1
many-to-many ×1
orm ×1
pagination ×1