1

我正在使用命名查询从使用 JPA 和 Hibernate 的数据库中获取实体,我遇到了一些令我困惑的事情:为什么没有javax.persistence.Parameter接口的默认实现?

CriteriaBuilder 在 JPA2 中的使用方式给我留下了深刻的印象,@StaticMetamodel这意味着我获得了类型安全,并且不必为名称设置字符串。我想应用类似于我目前正在研究的一些 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();
}
// ...

我惊讶地发现没有 Parameter 接口的实现——当然,我可以很容易地自己实现它,因为它们的缺席让我怀疑以这种方式使用它可能是一个错误?

我应该实施参数吗?有什么想法为什么没有现成的实现以及为什么我找不到很多(任何,真的)它的使用示例?

4

1 回答 1

1

这是一个接口,JPA 实现将使用他们自己的实现类来实现其标准“ParameterExpression”(扩展参数)的实现。用户通过CriteriaBuilder.parameter()获取一个,或者通过Query.getParameter()查询中的传统方式定义一个

于 2013-05-02T11:07:22.707 回答