【发布时间】:2014-07-17 20:17:00
【问题描述】:
这是我第一次真正使用 Eclipse 进行 Java 开发。我正在尝试使用 EclipseLink 的 JPA 实现。我将我所有的实体移动到一个单独的包“实体”中。我在一个名为“dataModeling”的单独 JPA 项目中有 persistence.xml。
一切都构建并运行良好。
几乎每个项目都依赖于我的实体。但是,我看到警告 Class javax.persistence.Entity not found - continuing with a stub. 等出现,因为相关项目不引用 EclipseLink。
解决方案是进入每个依赖项目的属性,在 Java Build Path > Libraries 下,点击 Add Library,然后点击 User Library 和然后选择 EclipseLink。
但是,对我来说,在每个项目中都引用 EclipseLink 是没有意义的!这是我不想给其他项目带来负担的实现细节。似乎正在发生这种情况,因为其他项目看到注释但无法识别它们。
所以真正的问题是:我如何使用 JPA(通过注解)而不需要所有其他项目都需要引用我的 JPA 实现?
【问题讨论】:
-
javax.persistence.Entity 是库 javaee.jar 的一个类。你的项目类路径中有这个 jar 吗?
-
@MarkKorzhov 和我在一起,在这里。该类已在 EclipseLink 库中定义。从
javaee.jar引用它有什么意义?当他们对 JPA 一无所知时,我试图避免添加对一堆项目的引用。 -
persistence-api.jar(又名 javax.persistence.jar)。您不需要 javaee.jar(除非您想引入 JavaEE 的其余部分!!!)
-
Javax.persistence 类只是JPA 规范的接口,其中Hibernate 和EclipseLink 是提供者,也需要J2EE 容器来实现。所以你会在很多地方找到一个persistence.jar,因为它们都需要它来工作。由于您的实体引用了 javax.persistence 类,因此任何需要您的实体的项目也需要 javax.persistence 类。如果他们打算以某种方式使用 EntityManager/JPA,其他项目将只需要 Eclipselink jar
-
@Travis Parks。是的,我知道,“JPA 人”非常懒惰,不愿意提供标准的 persistence-api.jar(已经在其他地方记录),而它应该是任何 JCP“项目”的标准规定。告诉甲骨文。
标签: java eclipse jpa eclipselink compiler-warnings