我以为hibernate只考虑使用注释的类变量@Column。但是今天奇怪的是,当我添加一个变量(该变量未映射到任何列,只是我在类中需要的一个变量)时,它试图将该变量作为列名包含在select语句中并引发错误-
@Column
“字段列表”中的未知列“ 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; }
为什么会这样?
JPA将使用该类的 所有 属性,除非您用以下方式专门标记它们@Transient:
@Transient
@Transient private String agencyName;
该@Column注释纯粹是可选的,并且是有让你忽略自动生成的列名。此外,lengthof属性@Column 仅在自动生成表定义时使用,对运行时没有影响。
length