【问题标题】:QueryDSL and Play FrameworkQueryDSL 和 Play 框架
【发布时间】:2011-10-22 19:58:56
【问题描述】:

我使用 QueryDSL 和 JPA2 有一段时间了,它是我所知道的最强大的 ORM 组合。 JPA Criteria API 是一场灾难。有了 QueryDSL,我也忘记了 JPQL。

我想在 Play 中使用 QueryDSL!除了 JPQL 的内联部分作为字符串之外,Play 中的所有内容看起来都非常好。它让我想起了 CakePHP...

我想在 Play 中使用可重构的查询语言(以及其他一些东西 :))。

QueryDSL 的使用很简单。它只需要 EntityManager。 但是 QueryDSL 有这个 APT 类生成器(就像来自 Hibernate 的 citeria API 一样)。

有没有人设法让这个类生成器与 Play 一起工作?是否可以重新创建和热重新加载这些类?

【问题讨论】:

    标签: playframework jpa-2.0 querydsl


    【解决方案1】:

    我认为Play框架中带有注解处理的Project Lombok的experience会对你有所帮助。设置 APT 处理很容易,但非常具体。看看play-lombok module。不要忽略 commands.py 文件并更改 org.eclipse.jdt.core-3.6.0.jar 引用以匹配您的 Play 版本中使用的版本。

    我最近的所有项目都在 Play 框架中使用 Querydsl。但是,我不使用 JPA。我将自己的对象模型与 Querydsl 一起使用,而不是 ORM,以根据具体情况获得良好的拟合。我不需要带有 Querydsl 的 APT。

    我没有在 Play 和 Querydsl 之间创建任何紧密集成,但我只是在每个控制器方法中使用了一些样板。总有一天我会写一个合适的插件。

    【讨论】:

    • 我浏览了 play-lombok 模块源代码。 Querydsl不需要javaagent等。它需要运行带有一些参数的Java编译器来生成带有APT的源代码文件。这个 javaagent 配置 APT 吗?到处都找不到。通过使用“带有 Querydsl 的自己的对象模型”,您的意思是使用 com.mysema.query.sql.SQLQuery 查询?你有任何公开的例子吗?你完全关闭了休眠?
    • 周末结束前我会给你一些例子。是的,JPA 和 Hibernate 已完全关闭。
    • 这里是Lombok agent
    【解决方案2】:

    我正在使用 Eclipse 运行 querydsl 游戏。 (见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中重新打开项目,它应该可以工作

    【讨论】:

    • 它会重新生成 Q.. 类?
    【解决方案3】:

    我没有使用 Play 的经验,但我知道以下设法将 Querydsl SQL 与 Play 框架一起使用:http://twitter.com/#!/rrmckinley

    他可能会帮助你。我不知道 Querydsl 与 Play 的任何其他集成。

    【讨论】:

      【解决方案4】:

      您可以检查更改数据库适配器的现有模块(例如 this one 用于 Mongo)并执行类似于链接 QueryDSL 的操作。如果它是一个模块,它应该可以使用 Play 热重载。

      【讨论】:

        猜你喜欢
        • 2014-05-16
        • 2015-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-31
        • 2014-03-29
        相关资源
        最近更新 更多