构建Java EE 6项目时出现FilerException

Jan*_*sen 20 netbeans java-ee-6

我在Netbeans 7中有一个Java EE 6项目,当我在IDE中编译并启动它时运行正常.但是,当我清理和构建项目时,我得到了一个

java.lang.RuntimeException:: javax.annotation.processing.FilerException尝试为类型{ myclass} 重新创建文件

(其中myclass始终是JPA实体类).

如果我在代码中更改某些内容,它会更改哪个实体类.

我不知道可能导致这个错误的原因 - 任何人都可以提供一个想法.

我使用的唯一额外的lib是Velocity.

更新:我在同一个数据库上使用两个持久性单元,一个是"普通",另一个是非事务性.我用于将事物记录到数据库的非事务性的; 每次插入日志事件后提交.

当我改变它并且只使用一个'普通'PU时,项目编译得很好.可能是两个PU干扰了eclipselink做的一些优化吗?

这是堆栈跟踪的开始:

An annotation processor threw an uncaught exception.
Consult the following stack trace for details.
java.lang.RuntimeException: javax.annotation.processing.FilerException: Attempt to recreate a file for type de.guj.contenthub.ftdts.entity.AgofEntry_
    at org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor.process(CanonicalModelProcessor.java:407)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:625)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:554)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:699)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:981)
    at com.sun.tools.
Run Code Online (Sandbox Code Playgroud)

小智 28

有两个持久性单元使用相同的Entity类似乎确实是问题.

在我的情况下,我有一个用于查询数据的单元,另一个用于验证.用于身份验证的那个不需要了解我的Entity类,因此在Netbeans中我必须取消选中"包含MyWebServiceProject"模块中的所有实体类.
或者添加:

<exclude-unlisted-classes>true</exclude-unlisted-classes>

到该持久性单元的web.xml文件.


miq*_*miq 19

我通过设置解决了这个问题

<property name="eclipselink.canonicalmodel.subpackage" value="foobar"/>
Run Code Online (Sandbox Code Playgroud)

对于persistence.xml中的每个持久性单元.每个单元的值必须是唯一的.然后将类生成到不同的包中,例如.com.mycompany.foo.PojoOne_com.mycompany.bar.PojoOne_而不仅仅是com.mycompany.PojoOne_.

资源


bil*_*tch 5

答案者是在persistence.xml文件中创建它;

<persistence-unit name="prod_PU">
   <properties>
    <property name="eclipselink.canonicalmodel.subpackage" value="prod"/>
   </properties>
</persistence-unit>
<persistence-unit name="dev_PU">
   <properties>
      <property name="eclipselink.canonicalmodel.subpackage" value="dev"/>
   </properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)

例如,entity1的包将生成为:

entity1.prod
entity1.dev
Run Code Online (Sandbox Code Playgroud)


Jan*_*sen 4

看来,问题是我在两个不同的持久性单元中使用同一个实体类。我不确定这是否被 JPA 一般禁止,或者只是 eclipselink 的问题。

我发现的一个“解决方案”是复制我的实体类。不太好,但目前可以使用。

仍然欢迎更多答案。