Существует ли способ уменьшить объем шаблонного кода, связанного с CriteriaQuery (в JPA 2.0)?

Я люблю безопасность типов, которую CriteriaQuery приносит лугу JPA 2.0, но он также приносит немного шаблонного кода. Например, позвольте, говорят, что у меня есть объект под названием NamedEntity, который просто имеет идентификатор, и поле String, названное "именем" (предположите, что этому установили ограничение на уникальность данных на истинный). Вот то, на что мог бы быть похожим NamedEntityManager:

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

    //retrieve all existing entities of type NamedEntity from DB
    public Iterable queryAll()
    {
        CriteriaBuilder builder = entityManager.getCriteriaBuilder();
        CriteriaQuery 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 query = builder.createQuery(NamedEntity.class);
        Root root = query.from(NamedEntity.class);
        query = query.where(root.get("name").in(name));

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

Существует ли способ уплотнить код, чтобы не копировать/вставлять те же строки кода в каждый метод запроса? Возможно, так или иначе снова используйте объект CriteriaQuery?

7
задан Andrey 14 June 2010 в 13:16
поделиться