Java 休眠禁用默认行为
我的Hibernate在假设要调用哪些列时遇到了问题 具体来说,当我在@ManyToOne字段中引用另一个表中的列时。 如果我不同时输入@JoinColumn注释,它会在字段名称中映射一个下划线 例如,我有一门课:Java 休眠禁用默认行为,java,spring,hibernate,jpa,hibernate-mapping,Java,Spring,Hibernate,Jpa,Hibernate Mapping,我的Hibernate在假设要调用哪些列时遇到了问题 具体来说,当我在@ManyToOne字段中引用另一个表中的列时。 如果我不同时输入@JoinColumn注释,它会在字段名称中映射一个下划线 例如,我有一门课: @Entity public class User extends AbstractEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id;
@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 */
}
发生的情况是,当它尝试获取某个用户的Twitter帐户时,我得到了异常:MySQLSyntaxErrorException:field list'中的未知列'twitteracc1..userFK_id'
看看它试图将userFK映射到什么:userFK\u id
。它当然不存在!我没有给它起那个名字
因此,问题归结为:是否可以关闭此功能?(将列名转换为“field\uu'foreignkey”的功能)
我知道使用@JoinColumn(name=“userFK”)
可以解决这个问题,但我宁愿将其关闭
这是JPA规范指定的默认设置 串联 以下各项之一:名称 引用关系的定义 引用的属性或字段 实体或可嵌入类; ""; 引用对象的名称 主键列。如果没有 这种参照关系 实体中的属性或字段,或 联接用于元素集合, 联接列名为 形成为 以下:实体名称; ""; 引用对象的名称 主键列
在hibernate中,这是在
NamingStrategy
中实现的,在本例中是EJB3NamingStrategy
。你可以实现你自己的版本,决定你想用什么。但这可能只会使人们变得复杂/困惑(人们可能期望标准适用) 这是JPA规范指定的默认值
串联
以下各项之一:名称
引用关系的定义
引用的属性或字段
实体或可嵌入类;
""; 引用对象的名称
主键列。如果没有
这种参照关系
实体中的属性或字段,或
联接用于元素集合,
联接列名为
形成为
以下:实体名称;
""; 引用对象的名称
主键列
在hibernate中,这是在
NamingStrategy
中实现的,在本例中是EJB3NamingStrategy
。你可以实现你自己的版本,决定你想用什么。但这可能只会使人们变得复杂/困惑(人们可能期望标准适用) 你好,是的,我知道。但是,如果唯一的解决方案是编写自己的NamingStrategy实现,我宁愿放弃它。再次感谢你!你好,是的,我知道。但是,如果唯一的解决方案是编写自己的NamingStrategy实现,我宁愿放弃它。再次感谢你!
@Entity
public class TwitterAccount extends AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne(fetch = FetchType.LAZY)
private User userFK;
}