我的Hibernate对于调用列的内容做了一些假设。
具体来说,当我执行@ManyToOne字段时,我引用另一个表中的列。 会发生的是,如果我也没有输入@JoinColumn注释,它会在字段中用下划线映射它的名称。
例如,我有这个课程:
@Entity
public class User extends AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String username;
private String password;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "userFK")
private List<TwitterAccount> twitterAccounts;
/* GETTERS & SETTERS OMITTED */
}
然后我有TwitterAccount类:
@Entity
public class TwitterAccount extends AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne(fetch = FetchType.LAZY)
private User userFK;
}
当它试图获取特定用户的Twitter帐户时会发生异常:MySQLSyntaxErrorException: Unknown column 'twitteracc1_.userFK_id' in 'field list'
查看它尝试将userFK映射到:userFK_id
的内容。当然它不存在!我没有给它那个名字。
所以问题归结为:是否可以关闭此功能?(将列名称转换为'field_'foreignkey'的功能)
我知道使用@JoinColumn(name = "userFK")
会解决它,但我宁愿将其关闭。
此致
答案 0 :(得分:1)
这是JPA规范
指定的默认值连接 以下内容:名称 引用关系 参考的属性或字段 实体或可嵌入的类; “”;引用的名称 主键列。如果没有 这种引用关系 实体中的财产或领域,或者如果 连接用于元素集合, 连接列名称是 形成的连接形式 以下:实体名称; “”;引用的名称 主键列。
在休眠中,这是在NamingStrategy
中实现的EJB3NamingStrategy
。你可以实现你自己的决定你想要使用的版本。但这可能只会使人们感到困惑/混淆(可能希望标准适用)。