QueryDSL и игровая платформа

Я использую QueryDSL с JPA2 в течение некоторого времени, и это самая мощная комбинация для ORM, которую я знаю. JPA Criteria API — это катастрофа. С QueryDSL я тоже забыл о JPQL.

Я хочу использовать QueryDSL с Play! В Play все выглядит очень хорошо, за исключением встроенных частей JPQL в виде строк. Напоминает CakePHP...

Я хотел бы иметь язык запросов, защищенный от рефакторинга, в Play (и некоторые другие вещи :)).

Использование QueryDSL будет простым. Ему нужен только EntityManager. Но у QueryDSL есть этот генератор классов APT (как и у Hibernate для citeria API).

Кому-нибудь удалось заставить этот генератор классов работать с Play? Можно ли воссоздать и перезагрузить эти классы?


person Piotr Gwiazda    schedule 20.09.2011    source источник


Ответы (4)


Я думаю, что опыт Project Lombok с обработкой аннотаций в фреймворке Play будет вам полезен. Обработку APT легко настроить, но она очень специфична. Посмотрите на модуль play-lombok. Не игнорируйте файл commands.py и измените ссылку org.eclipse.jdt.core-3.6.0.jar, чтобы она соответствовала версии, используемой в вашей версии Play.

Я использую Querydsl в фреймворке Play для всех своих последних проектов. Однако я не использую JPA. Я использую свои собственные объектные модели с Querydsl вместо ORM, чтобы получить хорошее соответствие в зависимости от ситуации. У меня не было необходимости в APT с Querydsl.

Я не создал какой-либо тесной интеграции между Play и Querydsl, но я просто использую шаблон в каждом методе контроллера. Когда-нибудь я напишу правильный плагин.

person rrmckinley    schedule 21.09.2011
comment
Я просмотрел исходный код модуля play-lombok. Querydsl не нуждается в javaagent и т. д. Ему необходимо запустить компилятор Java с некоторыми параметрами для создания файлов исходного кода с помощью APT. Этот javaagent настраивает APT? Нигде не могу найти. Под использованием собственных объектных моделей с Querydsl вы подразумеваете использование запросов com.mysema.query.sql.SQLQuery? У вас есть какой-нибудь публичный пример? Ты вообще отключил спящий режим? - person Piotr Gwiazda; 23.09.2011
comment
Я дам вам несколько примеров к концу выходных. Да, JPA и Hibernate полностью отключены. - person rrmckinley; 24.09.2011
comment
Вот агент Lombok - person rrmckinley; 24.09.2011

Я играю с querydsl, используя eclipse. (см. http://blog.mysema.com/2010/10/using-querydsl-in-eclipse.html)

В качестве сгенерированного исходного каталога я использовал app/, что означает, что классы Q будут генерироваться в том же каталоге, что и классы модели, что не оптимально, но работает.

Добавил эти строки в dependencies.yml

    - com.mysema.querydsl -> querydsl-jpa 2.2.3
    - com.mysema.querydsl -> querydsl-apt 2.2.3
    - log4j -> log4j 1.2.16
    - javassist -> javassist 3.12.1.GA

repositories:
    - queryDSL:
        type: iBiblio
        root: "http://source.mysema.com/maven2/releases/"
        contains:
            - com.mysema -> *           

Затем используйте play dependencies --sync и play eclipsify и снова откройте проект в eclipse, и он должен работать.

person Nils    schedule 22.10.2011
comment
И он регенерирует классы Q..? - person Piotr Gwiazda; 19.12.2011

У меня нет опыта работы с Play, но я знаю, что следующим удалось использовать Querydsl SQL с платформой Play: http://twitter.com/#!/rrmckinley

Возможно, он сможет вам помочь. Я не знаю о какой-либо другой интеграции Querydsl с Play.

person Timo Westkämper    schedule 21.09.2011

Вы можете проверить существующие модули, которые изменяют адаптер базы данных (например, этот для Mongo) и сделать что-то аналогично ссылке QueryDSL. Горячая перезагрузка Play должна быть доступна для него, если это модуль.

person Pere Villega    schedule 22.09.2011