Java 是否可以设置Hibernate';s";“违约”;变量名映射?

Java 是否可以设置Hibernate';s";“违约”;变量名映射?,java,hibernate,markup,Java,Hibernate,Markup,我正在寻找一种方法来设置Hibernate应用于Java对象中的变量名的“默认”映射,以便对数据库进行查询。目前,我们正在使用内联javax.persistence标记来手动设置列名,但由于我们的数据库有一个严格的命名策略,因此最好能够跳过手动命名,让Hibernate来进行映射。然而,目前,除了本地的非主键字段之外,这一点都不好用 目前,Hibernate似乎被设置为只将非外键映射到它们的名称(请参见下面示例类中的“foo”),将外键映射到“variableName\u ReferencedT

我正在寻找一种方法来设置Hibernate应用于Java对象中的变量名的“默认”映射,以便对数据库进行查询。目前,我们正在使用内联javax.persistence标记来手动设置列名,但由于我们的数据库有一个严格的命名策略,因此最好能够跳过手动命名,让Hibernate来进行映射。然而,目前,除了本地的非主键字段之外,这一点都不好用

目前,Hibernate似乎被设置为只将非外键映射到它们的名称(请参见下面示例类中的“foo”),将外键映射到“variableName\u ReferencedTable\u Id”(请参见下面示例类中的“bar”)。我们希望非外键保持原样,除了标记为@id的变量的,我们希望将其映射到“TableName\u id”,我们希望外键映射到“variableName\u 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;
    }

}
(摘自评论)


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-如果你想要的话,这个绿色记号仍然可以得到。