一尘不染

使休眠忽略未映射的类变量

hibernate

我以为hibernate只考虑使用注释的类变量@Column。但是今天奇怪的是,当我添加一个变量(该变量未映射到任何列,只是我在类中需要的一个变量)时,它试图将该变量作为列名包含在select语句中并引发错误-

“字段列表”中的未知列“ team1_.agencyName”

我的课 -

@Entity
@Table(name="team")
public class Team extends BaseObject implements Serializable {

@Id  @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;

@Column(length=50)
private String name;

@Column(length=10)
private String code;

@Column(name = "agency_id")
private Long agencyId;

private String agencyName; //note: not annotated.

}

仅供参考…我在另一个类中使用上述类并进行多对多映射

@ManyToMany(fetch = FetchType.EAGER) 
@JoinTable(
        name="user_team",
        joinColumns = { @JoinColumn( name="user_id") },
        inverseJoinColumns = @JoinColumn( name="team_id")
)    
public Set<Team> getTeams() {
    return teams;
}

为什么会这样?


阅读 213

收藏
2020-06-20

共1个答案

一尘不染

JPA将使用该类的 所有 属性,除非您用以下方式专门标记它们@Transient

@Transient
private String agencyName;

@Column注释纯粹是可选的,并且是有让你忽略自动生成的列名。此外,lengthof属性@Column
仅在自动生成表定义时使用,对运行时没有影响。

2020-06-20