【问题标题】:GWT with JPAGWT 与 JPA
【发布时间】:2010-10-16 18:24:27
【问题描述】:

我正在尝试使用 GWT 1.5.3 构建数据库应用程序。我对我的对象使用 JPA 注释。似乎在托管模式下 GWT 的 RPC 工作正常。但是当我尝试使用 GWT-compiler 编译我的应用程序时,我收到如下错误:“无法解析导入 javax.persistence”、“无法将实体解析为类型”。我的项目路径中已经包含了 toplink-essentials.jar。我还需要什么设置来解决这个问题?

【问题讨论】:

    标签: gwt jpa rpc toplink


    【解决方案1】:

    您可以使用 Gilead (http://sourceforge.net/projects/gilead/) 库通过 GWT 无缝管理 JPA 实体。

    问候

    【讨论】:

      【解决方案2】:

      您需要在 GWT 项目的构建路径中包含 JPA 注释的源代码。有关详细信息,请参见此处:

      http://code.google.com/p/google-web-toolkit/issues/detail?id=1830&can=1&q=jpa

      特别是这个 jar 文件可以解决你的问题:

      http://google-web-toolkit.googlecode.com/issues/attachment?aid=1475633892125294312&name=jpa-annotations-source.jar

      【讨论】:

      • 链接已更改为google-web-toolkit.googlecode.com/issues/…。不应依赖此类链接,因为它们会定期动态重新生成。应该谷歌搜索“jpa-annotations-source.jar google-web-toolkit.googlecode.com/issues/attachment”。
      【解决方案3】:

      JPA 和 GWT 的一般问题是 GWT 本身不支持花哨的 JPA 类,因此您只需执行简单的 POJO 持久实体 DTO,它实现了 java.io.Serializable 并具有简单的 JPA 资源注释。您需要在 GWT 客户端范围内创建实体类,要么将其放在 yourproject.client 包下,要么将它们添加到

      源路径="客户端"

      source path="folderOfYourEntities"

      在 GWT 项目的 YouProject.gwt.xml 文件中。这将包括 GWT 客户端中的实体对象,因此它们也可以在 RPC 的客户端使用它们。 DAO 必须在服务器端,并且可以包含您的容器支持的任何内容。

      您现在遇到的问题是,在编译时,GWT 编译器说它不知道实体 DTO 类中的 JPA 注释的导入是什么。这就是您需要 javax.persistence 类和源代码的原因。 Rustmyself 的 jpa-annotation-source.jar 参考有效。它只是 javax.persistence 编译的类文件和源代码文件加上一个 Persistence.gwt.xml。它是 javax.persistence 包的一个简单 GWT 模块。如果您知道如何制作自己的 GWT 模块,那么您应该很难完成所有这些工作。顺便说一句,可以在 glassfish 开发网站的构建部分 wiki.glassfish.java.net 上找到 Java EE 的官方源代码

      还有许多其他解决方案可以使用代理自动将您喜欢的 PU 实体包装到简单对象或在运行时延迟加载它们。它们有效,但不是最佳解决方案。最佳实践是通过在 GWT 客户端上下文中拥有 POJO JPA DTO 实体并在服务器上拥有完整的 DAO 来使事情从一开始就变得简单和健壮。

      GWTPersistence 示例
      我添加了一个关于如何使 GWT 和 JPA 无缝工作的实际工作示例。它是一个带有源代码和部署文件的 NetBean 项目。见GWTPersistence on NingZhang.info

      【讨论】:

        【解决方案4】:

        好的,我找到了我缺少的东西。我需要在 myapp-compile.cmd 脚本(或 ant 构建文件)的 GWT 编译器路径中包含 jpa-annotations-source.jar。顺便问一下,谁能告诉我这个 jpa-annotations-source.jar 文件的来源?

        【讨论】:

        • 另外,我应该说在 GWT 1.5 中不需要包含上面的 jar。相反,只需使用生产 jar,例如 toplink-essentials.jar;当然将它传递给您的 GWT 编译器以编译成功;并且不要在你的 app.gwt.xml 中写
        【解决方案5】:

        我也在使用 JPA GWT 数据转换等。

        为了消除 DTO 层,我也使用了 Gilead。

        我的反对意见是关于翻译 javax.persistence。为了避免这种情况,我使用了 XML JPA 映射声明(orm.xml)

        【讨论】:

          【解决方案6】:

          简单地说,保留另一个版本的实体,但没有注释!

          【讨论】:

            【解决方案7】:

            根据 synergetic 的评论反弹,您现在(从 GWT 1.5 开始)只需要添加

            <source path='javax.persistence'/>
            

            到你的 Module.gwt.xml

            【讨论】:

              猜你喜欢
              • 2011-03-21
              • 2011-05-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-11-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多