【问题标题】:Why is there a class with entity name plus an underscore for JPA entity class为什么JPA实体类有一个实体名称加下划线的类
【发布时间】:2014-06-13 03:15:33
【问题描述】:

我是 JPA 的新手,我创建了一个如下所示的类

/**
 * 
 */
package programme;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

/**
 * @author anoop
 *
 */
@Entity
@Table(name="course")
@Access(AccessType.FIELD)
public class programme {
    @Id private int id;
    private String name;
    private int year;
    @Transient private String comments;

    //getters and setters for the fields.
}

我注意到还有另一个类名为我的实体 java 类 Programme.java,带有下划线,即 Programme_.java。这个类是什么以及为什么会生成这个类。有什么方法可以阻止它的生成?

Programme_.java 类的代码如下。

package programme;

import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;

@Generated(value="Dali", date="2014-04-27T21:32:59.433+0530")
@StaticMetamodel(programme.class)
public class programme_ {
    public static volatile SingularAttribute<programme, Integer> id;
    public static volatile SingularAttribute<programme, String> name;
    public static volatile SingularAttribute<programme, Integer> year;
    public static volatile SingularAttribute<programme, String> comments;
}

【问题讨论】:

标签: java hibernate jpa database-schema


【解决方案1】:

这是您的“规范元模型”。如 JPA 2.x 规范(第 6.2 节)所述,它可以与 JPA Criteria API 一起使用。

要阻止 Eclipse 生成这些类:编辑 Eclipse 项目属性 > JPA > 规范元模型 (JPA 2.0) > 源文件夹 - 将文件夹的值设置为“”。

【讨论】:

    【解决方案2】:

    这是我对persistence.xml 所做的更改为prevent 一个Java 文件和一个使用下划线生成的类文件(这导致了我a problem):

    diff --git a/examples/javaee7/src/main/resources/META-INF/persistence.xml b/examples/javaee7/src/main/resources/META-INF/persistence.xml
    index 86d3c0c..a477432 100644
    --- a/examples/javaee7/src/main/resources/META-INF/persistence.xml
    +++ b/examples/javaee7/src/main/resources/META-INF/persistence.xml
    @@ -1,9 +1,9 @@
     <?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="javaee7addressbookPersistenceUnit" transaction-type="JTA">
    -        <exclude-unlisted-classes>false</exclude-unlisted-classes>
    +        <exclude-unlisted-classes>true</exclude-unlisted-classes>
             <properties>
                 <property name="javax.persistence.schema-generation.database.action" value="create"/>
             </properties>
         </persistence-unit>
     </persistence>
    

    在此更改之前,正在生成以下文件:

    • target/generated-sources/annotations/com/greptilian/addressbookmvc/javaee7/Person_.java
    • target/classes/com/greptilian/addressbookmvc/javaee7/Person_.class

    【讨论】:

      【解决方案3】:

      除了按 IDE 生成之外(如 Brian Vosburgh 所述),JPA 元模型可能会在 maven 构建期间生成,例如通过JPA Static Metamodel Generator。如果 maven 依赖项会发生这种情况

      <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-jpamodelgen</artifactId>
          <version>CURRENT-VERSION</version>
      </dependency>
      

      被使用(例如在 pom.xml 中列出)。

      JPA 元模型可以与 JPA 标准 API 一起使用,另请参阅 here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-19
        • 2014-06-20
        • 2013-09-08
        • 2013-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-27
        相关资源
        最近更新 更多