首页 > 解决方案 > JPAMetaModelEntityProcessor 无法使用特殊字符正常工作

问题描述

我正在使用 oracle db 进行 spring-data-jpa 项目。在我的项目中,有一个名为 Booking 的实体 -

@Entity
public class Booking {
  public enum $State { ACCEPTED, REJECTED}
  @Id
  private Long id;
  private $State state;
}

我正在使用休眠作为 ORM。要为这个实体生成元模型,我正在使用 hibernate-jpamodelgen 依赖项 -

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <version>5.4.22.Final</version>
        </dependency>

当我mvn clean install在我的项目上运行时,它开始在目标文件夹中构建元模型文件。但是对于这个 Booking 类,它会生成 -

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Booking.class)
public abstract class Booking_ {
   public static volatile SingularAttribute<Booking, .State> state;
}

在编译期间它失败,因为.State不存在。我不明白它为什么要转换$.. 有谁知道如何解决这个问题?

标签: javahibernatejpaspring-data-jpahibernate-criteria

解决方案


这个问题的解决方案是我们不能在类名中使用 $。$ 是关于 JAVA 类名的特殊字符,由 JVM 在内部用于处理内部类。有关更多详细信息,请查看 - https://hibernate.atlassian.net/browse/HHH-14277


推荐阅读