我正在尝试使用 GWT 1.5.3 构建数据库应用程序。我对我的对象使用 JPA 注释。似乎在托管模式下 GWT 的 RPC 工作正常。但是当我尝试使用 GWT-compiler 编译我的应用程序时,我收到如下错误:“无法解析导入 javax.persistence”、“无法将实体解析为类型”。我的项目路径中已经包含了 toplink-essentials.jar。我还需要什么设置来解决这个问题?
7 回答
您可以使用 Gilead ( http://sourceforge.net/projects/gilead/ ) 库通过 GWT 无缝管理 JPA 实体。
问候
您需要在 GWT 项目的构建路径中包含 JPA 注释的源代码。有关更多详细信息,请参见此处:
http://code.google.com/p/google-web-toolkit/issues/detail?id=1830&can=1&q=jpa
特别是这个 jar 文件,它将解决您的问题:
JPA 和 GWT 的一般问题是 GWT 本身不支持花哨的 JPA 类,因此您只需执行实现 java.io.Serializable 并具有简单 JPA 资源注释的简单 POJO 持久实体 DTO。您需要在 GWT 客户端范围内创建实体类,要么将其放在 yourproject.client 包下,要么将它们添加到
源路径="客户端"
源路径="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 项目。参见NingZhang.info 上的 GWTPersistence
好的,我找到了我所缺少的。我需要在 myapp-compile.cmd 脚本(或 ant 构建文件)的 GWT 编译器路径中包含 jpa-annotations-source.jar。顺便说一句,谁能告诉我这个 jpa-annotations-source.jar 文件的来源?
我也在使用 JPA <--> GWT 数据转换等。
为了消除 DTO 层,我也使用了 Gilead。
我的反对意见是关于翻译 javax.persistence。为了避免这种情况,我使用了 XML JPA 映射声明(orm.xml)
简单地说,保留另一个版本的实体,但没有注释!
根据 synergetic 的评论反弹,您现在(从 GWT 1.5 开始)只需要添加
<source path='javax.persistence'/>
到您的 Module.gwt.xml