JPA:错误:尝试重新创建类型的文件< MyClass>

vcudknz3  于 2022-11-14  发布在  其他
关注(0)|答案(7)|浏览(146)

每次运行代码时,都会出现以下错误:

java.lang.RuntimeException: javax.annotation.processing.FilerException: Attempt to recreate a file for type domein.ClubLes_
    [javac]     at org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor.process(CanonicalModelProcessor.java:407)
    [javac]     at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:964)
    [javac]     at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:881)
    [javac]     at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2100(JavacProcessingEnvironment.java:110)
    [javac]     at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1202)
    [javac]     at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1311)
    [javac]     at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1250)
    [javac]     at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:928)
    [javac]     at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:306)
    [javac]     at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:165)
    [javac]     at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:57)
    [javac]     at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:43)
    [javac] Caused by: javax.annotation.processing.FilerException: Attempt to recreate a file for type domein.ClubLes_
    [javac]     at jdk.compiler/com.sun.tools.javac.processing.JavacFiler.checkNameAndExistence(JavacFiler.java:727)
    [javac]     at jdk.compiler/com.sun.tools.javac.processing.JavacFiler.createSourceOrClassFile(JavacFiler.java:489)
    [javac]     at jdk.compiler/com.sun.tools.javac.processing.JavacFiler.createSourceFile(JavacFiler.java:426)
    [javac]     at org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor.generateCanonicalModelClass(CanonicalModelProcessor.java:98)
    [javac]     at org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor.generateCanonicalModelClasses(CanonicalModelProcessor.java:226)
    [javac]     at org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor.process(CanonicalModelProcessor.java:403)
    [javac]     ... 11 more

BUILD FAILED
E:\ProjectJava\java-g11\Taijitan\nbproject\build-impl.xml:1134: The following error occurred while executing this line:
E:\ProjectJava\java-g11\Taijitan\nbproject\build-impl.xml:381: Compile failed; see the compiler error output for details.

一开始我以为是我不小心忘记添加子类了,但还是出现了同样的错误。ClubLes继承自Les,Les是一个只包含getter的接口。我需要把接口也序列化吗?我不知道是哪里出了问题。
俱乐部**

@Entity
public class ClubLes implements Serializable, Les {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "LesId")
    private int id;
    @Column(name = "Naam")
    String naam;
    @Column(name = "Soort")
    String soort;
    @ManyToOne
    @JoinColumn(name = "GraadNumeriek")
    Graad graad;
    @Column(name = "FotoUrl")
    private String fotoUrl;
    @Column(name = "Beschrijving")
    private String beschrijving;
    @Column(name = "VideoUrl")
    private String videoUrl;

    public ClubLes() {
    }

莱斯接口

public interface Les {

    int getId();
    String getNaam();
    String getSoort();
    //More getters
}

PU

我只有一个持久性单元,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="TaijitanPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>domein.Graad</class>
    <class>domein.Locatie</class>
    <class>domein.ClubPersoon</class>
    <class>domein.ClubActiviteit</class>
    <class>domein.ClubLes</class>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://localhost:1433;databaseName=Taijitan"/>
      <property name="javax.persistence.jdbc.user" value="sa"/>
      <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
      <property name="javax.persistence.jdbc.password" value="Wachtwoord2019"/>
      <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
    </properties>
  </persistence-unit>
</persistence>

我还注意到,当我从JPA中删除clubblesson时,它会对遵循相同方案的ClubPersoon抛出相同的错误

vh0rcniy

vh0rcniy1#

我也有这个错误,这是因为我在 pom.xml 中有依赖关系和元模型插件配置,所以它们被生成了两次。尝试删除其中一个。
我的依赖项配置:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-jpamodelgen</artifactId>
    <scope>provided</scope>
</dependency>

我的插件配置:

<plugin>
    <groupId>org.bsc.maven</groupId>            
    <artifactId>maven-processor-plugin</artifactId>
    <version>4.5</version>
    <executions>            
        <execution>         
          <id>process</id>          
              <goals>           
                <goal>process</goal>            
              </goals>          
              <phase>generate-sources</phase>           
              <configuration>           
                <!-- source output directory -->            
                <outputDirectory>target/metamodel</outputDirectory>         
              </configuration>          
            </execution>            
        </executions>           
</plugin>           
<plugin>            
    <groupId>org.codehaus.mojo</groupId>            
    <artifactId>build-helper-maven-plugin</artifactId>  
    <executions>            
      <execution>           
        <id>add-source</id>         
        <phase>generate-sources</phase>         
        <goals>         
          <goal>add-source</goal>           
        </goals>            
        <configuration>         
          <sources>         
            <source>target/metamodel</source>           
          </sources>            
        </configuration>
    </execution>            
  </executions>         
</plugin>
1l5u6lss

1l5u6lss2#

尝试在web.xml中设置:
<exclude-unlisted-classes>true</exclude-unlisted-classes>
错误也可能来自元模型生成器。
解决方法:

***在再次生成之前***清理生成目录,或者

  • 从元模型插件中启用配置覆盖。

(* 对于maven,这只是指mvn clean install-但只有当生成的元模型文件最终位于build文件夹中而不是普通文件旁边时)

  • 说明:* 此工具会从您的实体产生中继模型档案。如果您有实体Car.java,它会产生名为Car_.java的档案(请注意底缐)。例如,这个产生的中继模型档案包含实体的字段,可供您在准则产生器中指涉。
ioekq8ef

ioekq8ef3#

尝试将<exclude-unlisted-classes>true</exclude-unlisted-classes>添加到persistence.xml。我认为由于缺少此语句,类被处理了两次。

0ejtzxu1

0ejtzxu14#

我最近遇到了同样的问题。在我的案例中,我正在开发一个工具(.jar),用于执行一些导入任务,使用CSV作为源,使用Oracle数据库作为数据的最终目的地。在其他运行在Application Server中的应用程序中,我们将其优势用于数据库交互。
我使用这个依赖关系:

  • Eclipse链接2.6.2
  • 文件系统

在我的例子中,我在persistence.xml文件中有两个持久性单元,并且在流程中可以动态地使用其中一个。
首先,我尝试按照一些建议来解决这个问题,比如在持久性单元中设置属性exclude-unlisted-classes,如下所示:

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

我还将实体类添加到第一个持久单元中,因为一个类只能在一个已配置的持久单元中列出。但在运行时该实用程序找不到实体类。(与我使用的Netbeans无关)它也可以工作,但缺点是我必须有一些棘手的属性“jar文件”也用于定位实体类。
最后我决定用其他方法来处理这个问题,因为以前的解决方案并没有完全解决所有的问题。
下面的步骤对我很有效。在persistence.xml文件中,我将该行更改为:

<exclude-unlisted-classes>false</exclude-unlisted-classes>

这些是我的PU:

<persistence-unit name="source1" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/source1</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <shared-cache-mode>NONE</shared-cache-mode>
    <properties/>
</persistence-unit>
<persistence-unit name="source2" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/source2</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <shared-cache-mode>NONE</shared-cache-mode>
    <properties/>
</persistence-unit>

在pom.xml文件中,我使用了以下插件:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
            <source>${maven.compiler.source}</source>
            <target>${maven.compiler.target}</target>
            <compilerArguments>
                <proc:none/>
            </compilerArguments>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.6</version>
        <configuration>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                    <mainClass>${mainClass}</mainClass>
                </manifest>
            </archive>
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>

这样就生成了一个包含所有依赖项的fat.jar。最后一个注解我可以说我没有使用元模型类,而是使用了实体类本身,这样无论是在编译阶段还是在运行时阶段都没有任何问题。

72qzrwbm

72qzrwbm5#

我面临的问题,因为相同的类创建在项目的target-dev文件夹内。一旦我删除了所有的.java文件的Map器,然后我做了“无效和缓存/重启”,然后我的服务器启动。

uttx8gqw

uttx8gqw6#

在我的情况下,重置Intellij idea中项目的SDK只会有所帮助。
此外,在其他情况下,当/src/generated文件夹与/build(带有构建构件)一起删除时,它也会有所帮助。因此,出于某种原因,src/generated文件夹实际上没有在gradle的clean命令中更新或清理

qc6wkl3g

qc6wkl3g7#

清理构建目录(maven的目标文件夹)对我有帮助。

相关问题