有没有办法减少与CriteriaQuery相关联的样板代码的数量(在JPA 2.0中)?

安德烈:

我喜欢CriteriaQuery带来JPA 2.0 的类型安全性,但是它也带来了一些样板代码。例如,假设我有一个名为NamedEntity的实体,该实体仅具有一个id和一个名为“ name”的String字段(假设其唯一约束设置为true)。这是NamedEntityManager的外观:

public class NamedEntityManager
{
    //inject using your framework
    EntityManager entityManager;

    //retrieve all existing entities of type NamedEntity from DB
    public Iterable<NamedEntity> queryAll()
    {
        CriteriaBuilder builder = entityManager.getCriteriaBuilder();
        CriteriaQuery<NamedEntity> query = builder.createQuery(NamedEntity.class);
        return entityManager.createQuery(query).getResultList();
    }

    //retrieve a single entity of type NamedEntity from DB using specified name
    public NamedEntity queryByName(String name)
    {
        CriteriaBuilder builder = entityManager.getCriteriaBuilder();
        CriteriaQuery<NamedEntity> query = builder.createQuery(NamedEntity.class);
        Root<NamedEntity> root = query.from(NamedEntity.class);
        query = query.where(root.<NamedEntity>get("name").in(name));

        //skipped the try/catch block for the sake of brevity
        return entityManager.createQuery(query).getSingleResult();
    }
}

有没有一种方法可以压缩代码,以避免将相同的代码行复制/粘贴到每个查询方法中?也许以某种方式重用了CriteriaQuery对象?

安德烈:

似乎没有办法减少代码量。我想必须牺牲一些东西以获得类型安全。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法将标签与事件机中的状态相关联?

有没有办法获取哪个会话与屏幕中的哪个日志文件相关联?

有没有办法在Firebase中减少请求?

有没有办法在 R 中制作具有不同变量对的 2 路表?

在 RxJava(2) 中,有没有办法跟踪谁对主题调用了 onNext()?

有没有办法修改webapp2中的请求参数

有没有办法在 angular 2 dart 中延迟加载组件?

有没有办法从角度2的字符串中删除html标签?

有没有办法在相同的conda环境中安装python 3和python 2?

有没有办法在Symfony2中以编程方式启用SQL日志记录?

有没有办法在 Angular 2 中隐藏组件?

有没有办法在 Jenkins 2 作业中应用插件后自动提交、推送?

有没有办法在TypeScript 2+中全局添加类型定义?

有没有办法在Python 2中访问分数的分母

有没有办法在Angular2中进行“输入转换”(与管道相反)?

有没有办法从Angular 2+中删除未使用的导入和声明?

有没有办法在ng2-bootstrap中构建移动导航栏?

有没有办法在 RE2 中的指定字符之前和之后匹配?

有没有办法从每个查询中获取2行?

Google 表格:有没有办法在公式中包含 2 个非嵌套的 IF 语句?

有没有办法从Angular 2的组件中检查@Output接线?

有没有办法对ggplot2中的大小比例保持绝对控制

有没有办法在 phoenix 应用程序中设置 2 个前端?

有没有办法在python / rpy2中访问R数据帧列名?

有没有办法在Angular2中将ngForm用于div元素

有没有办法2在赛普拉斯中创建多个命令文件

有没有办法在Azure AD B2C中启用Microsoft Authenticator?

有没有办法在PHP / WordPress中托管Axis2服务?

有没有办法防止在Angular 2 RC5中删除DOM?