Spring MVC / Hibernate / Eclipse -为什么自动生成模型文件



我有一个基于Spring MVC的Java项目。这个项目对ORM使用hibernate。我也使用Eclipse Kepler作为IDE。我有一个关于我的项目的模型部分的问题。我拥有的所有.java文件都是模型文件,它们都有一个以下划线结尾的等效命名文件。这些以下划线结尾的等效文件是"我认为是由IDE"自动生成的。我不知道为什么这些文件被生成,他们的目的是什么。有人能解释一下吗,给我指出正确的方向?我觉得这要么是一个不正确的IDE设置,导致它们生成,要么是由于我在项目中的一些配置设置而生成的。

例如,我有一个User.java和一个user_java文件。我写的是User.java而不是User_.java。user_java是自动生成的。下面是每个文件的代码,第一个块是自动生成的user_java。

package com.bah.iaat.model.data;
import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2014-04-03T23:00:06.698-0400")
@StaticMetamodel(AnalyticAgenda.class)
public class AnalyticAgenda_ {
    public static volatile SingularAttribute<AnalyticAgenda, Integer> id;
    public static volatile SingularAttribute<AnalyticAgenda, String> name;
    public static volatile SingularAttribute<AnalyticAgenda, String> desc;
    public static volatile SingularAttribute<AnalyticAgenda, Integer> userGroupId;
    public static volatile SingularAttribute<AnalyticAgenda, String> flag;
}

下一段代码是我写的代码:

package com.bah.iaat.model.data;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.NamedQueries;
import org.hibernate.annotations.NamedQuery;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@NamedQueries({@NamedQuery(name = "SelectAllUsers",query = "Select u from User u"),
@NamedQuery(name = "SelectUserByName",query = "Select u from User u where u.name =:uName"),
@NamedQuery(name = "findUserByIdentifier",query = "Select u from User u where u.name =:pId"),
@NamedQuery(name = "findUserIdByName",query = "select u.id from User u where u.name =:pName"),
@NamedQuery(name = "findUserByName",query = "select u from User u where u.name =:pName")})
@Entity
@Table(name="USERS") 
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="USER_ID")
    private Integer id;
    @Column(name="USER_NAME", unique=true)
    private String name;
    @Column(name="LAST_LOGIN")
    private Date lastLogin;
    @ManyToOne
    @JoinColumn(name="USER_GROUP_ID" )  
    private UserGroup userGroup;
    public User() {}  
    public User(String name, UserGroup userGroup, Date lastLogin){
        this.name = name;       
        this.userGroup = userGroup;     
        this.lastLogin = lastLogin;
    }
    .....
}

这些类构成持久性上下文的元模型。在使用JPA2 Criteria API时使用它们,以便基于标识符而不是字符串创建类型安全的查询。例如:

CriteriaBuilder builder = em.getCriteriaBuilder(); 
CriteriaQuery<Person> query = builder.createQuery(Person.class);
Root<Person> from = query.from(Person.class);
query.where(criteriaBuilder.equal(person.get(Person_.name), "Doe"));

使用Person_.name而不是"name"保证您使用的是一个存在的字段,并确保您将获得编译错误而不是运行时错误,例如,如果您将字段name重命名为lastName

最新更新