使休眠忽略未映射的实例变量

2022-08-31 05:56:44

我认为休眠只考虑用.但奇怪的是,今天当我添加一个变量(没有映射到任何列,只是类中我需要的变量)时,它试图将该变量作为列名包含在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;
}

为什么会发生这种情况?!


答案 1

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

@Transient
private String agencyName;

批注纯粹是可选的,它允许您覆盖自动生成的列名。此外,属性仅在自动生成表定义时使用,它对运行时没有影响。@Columnlength@Column


答案 2

对于通过搜索引擎找到此帖子的人来说,此问题的另一个可能原因是导入了错误的包版本。确保导入而不是其他包。@Transientjavax.persistence.transient


推荐