Java 是否可以设置Hibernate';s";“违约”;变量名映射?
我正在寻找一种方法来设置Hibernate应用于Java对象中的变量名的“默认”映射,以便对数据库进行查询。目前,我们正在使用内联javax.persistence标记来手动设置列名,但由于我们的数据库有一个严格的命名策略,因此最好能够跳过手动命名,让Hibernate来进行映射。然而,目前,除了本地的非主键字段之外,这一点都不好用 目前,Hibernate似乎被设置为只将非外键映射到它们的名称(请参见下面示例类中的“foo”),将外键映射到“variableName\u ReferencedTable\u Id”(请参见下面示例类中的“bar”)。我们希望非外键保持原样,除了标记为@id的变量的,我们希望将其映射到“TableName\u id”,我们希望外键映射到“variableName\u id”。这是可能的,还是我们必须忍受手动映射Java 是否可以设置Hibernate';s";“违约”;变量名映射?,java,hibernate,markup,Java,Hibernate,Markup,我正在寻找一种方法来设置Hibernate应用于Java对象中的变量名的“默认”映射,以便对数据库进行查询。目前,我们正在使用内联javax.persistence标记来手动设置列名,但由于我们的数据库有一个严格的命名策略,因此最好能够跳过手动命名,让Hibernate来进行映射。然而,目前,除了本地的非主键字段之外,这一点都不好用 目前,Hibernate似乎被设置为只将非外键映射到它们的名称(请参见下面示例类中的“foo”),将外键映射到“variableName\u ReferencedT
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;
}
}
(摘自评论)
Hibernate确实有NamingStrategy的概念,但它对than对象是PK还是普通列并不敏感,所以这没有任何用处。(从注释中复制)
Hibernate确实有NamingStrategy的概念,但它对than对象是PK还是普通列不敏感,因此这没有任何用处。Hibernate确实有
NamingStrategy
的概念,但它对than对象是PK还是普通列不敏感,所以这没有任何用处。感谢NamingStrategy
idea-使用它来实现外键约定。不幸的是,仍然在使用主键,因为如果不包括@column(name=foo)
注释,则永远不会调用集合NamingStrategy
中的columnName
。遗憾的是,我有点期待Hibernate隐式地假设任何未标记为@Transient
且未以其他方式标记的变量都是@Column
,并在运行时插入它自己的@Column(name=VarName)
;考虑到没有其他人站出来解决这个问题,如果你想写下你的评论作为答案,我很乐意给你一个绿色的勾号-NamingStrategy
解决了一半的问题,至少。@Skaffman-如果你想要的话,那绿色的勾号还可以拿。Hibernate确实有NamingStrategy
的概念,但它对than对象是PK还是普通列并不敏感,所以这没有任何用处。感谢NamingStrategy
idea-使用它来实现外键约定。不幸的是,仍然在使用主键,因为如果不包括@column(name=foo)
注释,则永远不会调用集合NamingStrategy
中的columnName
。遗憾的是,我有点期待Hibernate隐式地假设任何未标记为@Transient
且未以其他方式标记的变量都是@Column
,并在运行时插入它自己的@Column(name=VarName)
;考虑到没有其他人站出来解决这个问题,如果你想写下你的评论作为答案,我很乐意给你一个绿色记号-NamingStrategy
至少解决了一半的问题。@Skaffman-如果你想要的话,这个绿色记号仍然可以得到。