是否可以设置 Hibernate 的“默认”变量名映射?
我正在寻找一种方法来设置 Hibernate 应用于 Java 对象中的变量名称的“默认”映射,以根据数据库对其进行查询。目前,我们正在使用内联 javax.persistence 标记来手动设置列名称,但由于我们对数据库有严格的命名策略,因此如果能够跳过手动命名并让 Hibernate 进行映射,那就太好了。然而,目前这对于除本地非主键字段之外的任何内容都不起作用。
目前,Hibernate 似乎设置为将非外键映射到其名称(请参阅下面示例类中的“foo”),并将外键映射到“variableName_ReferencedTable_Id”(请参阅下面示例类中的“bar”) 。我们希望非外键保持原样,除了标记为 @id 的变量,我们希望将其映射到“TableName_Id”,并且我们希望将外键映射到“变量名_Id”。这是否可能,或者我们只能忍受手动映射?
package testPackage.test
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity
public class Table1 {
private int id;
private int localVariable;
private int foreignKeyVariable;
// Constructor here somewhere
// Without a @Column( name="Table1_Id" ), this comes out as "id".
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
// This works fine, being a local field.
public int getLocalVariable() {
return localVariable;
}
public void setLocalVariable(int LocalVariable) {
this.localVariable = localVariable;
}
// Withou a @JoinColumn( name="foreignKeyVariable_Id" ) , this comes out as "foreignKeyVariable_Table2_Id".
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
@JoinColumn() // Not sure if this would even be necessary at all. Happy to leave it out if possible.
public int getForeignKeyVariable() {
return foreignKeyVariable;
}
public void setForeignKeyVariable(int foreignKeyVariable) {
this.foreignKeyVariable = foreignKeyVariable;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
(从评论复制)
Hibernate确实有NamingStrategy的概念,但它对对象是PK还是普通列不敏感,所以这没有任何用处。
(copied from comment)
Hibernate does have the concept of NamingStrategy, but it's not sensitive to whether than object is a PK or a normal column, so that's not going to be of any use.