我正在使用命名查询使用JPA和Hibernate从数据库中获取实体,我遇到了令我困惑的事情:为什么没有javax.persistence.Parameter
接口的默认实现?
我对JPA2中CriteriaBuilder使用@StaticMetamodel
的方式印象深刻,这意味着我获得了Type安全性,而不必为名称设置字符串而烦恼。我想应用类似于我目前正在研究的一些JPA1 EJB的东西:
Dealergroup_.class:
public Dealergroup_
{
public Parameter<Integer> id = new ParameterImpl<Integer>("id");
/// etc...
}
DealergroupFacade.class:
// ...
public Dealergroup fetch(Integer id)
{
TypedQuery<Dealergroup> query = em.createNamedQuery("Dealergroup.fetchById", Dealergroup.class);
query.setParameter(Dealergroup_.id, query);
return query.getSingleResult();
}
// ...
我很惊讶地发现没有参数接口的实现 - 当然,我可以通过他们的缺席自己轻松实现它让我怀疑以这种方式使用它可能是一个错误吗?
我应该实施参数吗?任何想法为什么没有现成的实现,为什么我找不到很多(任何,真的)使用它的例子?
答案 0 :(得分:1)
这是一个JPA实现将使用他们自己的实现类实现Criteria“ParameterExpression”(扩展Parameter)的实现的接口。用户通过CriteriaBuilder.parameter()
获取一个,或通过Query.getParameter()
通过查询中的传统方式定义