Добавьте логику в столбец в качестве запроса, используя критерии API - PullRequest
4 голосов
/ 25 августа 2011

Я даже не уверен, что это возможно, но я решил, что стоит спросить. Я давно использую нативный запрос для этого.

Скажите, у меня есть этот запрос.

    public static List<PkgLoad> findBetweenDatesWrapSpec( PkgLine pkgLine, WrapSpec wrapSpec, Date startDate, Date endDate, boolean metric ) {

    CriteriaBuilder builder = JPA.local.get().em().getCriteriaBuilder();
    CriteriaQuery cq = builder.createQuery( PkgLoad.class );
    Root<PkgLoad> pkgLoad = cq.from( PkgLoad.class );

    Predicate pkgLineQuery = builder.equal( pkgLoad.get( "pkgLineId" ), pkgLine );
    Predicate wrapQuery = builder.equal( pkgLoad.get( "wrapSpecId" ), wrapSpec );
    Predicate dateQuery = builder.between( pkgLoad.get( "timeStamp" ).as( Date.class ), startDate, endDate );

    cq.where( builder.and( pkgLineQuery, wrapQuery, dateQuery ) );
    cq.orderBy( builder.desc( pkgLoad.get( "timeStamp" ) ) );
    Query query = JPA.local.get().em().createQuery( cq );
    return query.getResultList();
}

У меня есть столбец, называемый унциями в модели. Что делать, если я хочу преобразовать унции в метрику в зависимости от свойства. Теперь это свойство зависит от имени пользователя, поэтому переопределение метода get не является опцией. Если я переопределяю метод get, он портит остальную часть приложения. Просто хотел узнать какие-либо варианты для этого. Спасибо.

1 Ответ

1 голос
/ 26 августа 2011

Во-первых, я вижу, что вы используете Play Framework.Может быть проще использовать методы "find" из Model (см. здесь ) для создания нужного запроса.

Во-вторых, если свойство зависит от пользователя, оно будет приемлемымсохранить значение в сеансе воспроизведения, когда пользователь входит в систему, в котором говорится, хочет ли пользователь унции или метрика.Таким образом, ваш метод должен только проверить значение сеанса с помощью:

Scope.Session.current().get("key") //key = key for your value

и соответственно изменить запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...