Можно ли установить отображение имен переменных по умолчанию в Hibernate? - PullRequest
1 голос
/ 07 июля 2010

Я ищу способ установить сопоставление «по умолчанию», которое Hibernate применяет к имени переменной в объекте Java, чтобы запросить его у базы данных. В настоящее время мы используем встроенную разметку javax.persistence для ручной установки имен столбцов, но поскольку у нас есть жесткая политика именования для нашей базы данных, было бы неплохо иметь возможность просто пропустить именование вручную и позволить Hibernate выполнить сопоставление. Тем не менее, в настоящее время это не работает вообще ни с чем, кроме как для локальных полей, не являющихся первичными ключами.

В настоящий момент Hibernate, похоже, настроен на сопоставление не-внешних ключей только с их именами (см. «Foo» в приведенном ниже примере класса), а с внешними ключами - «variableName_ReferencedTable_Id» (см. «Bar» ниже пример класса). Мы хотели бы, чтобы не внешние ключи оставались такими, как есть, за исключением для переменной, помеченной @id, которую мы хотели бы отобразить в "TableName_Id", и мы хотели бы, чтобы внешние ключи отображались в " variableName_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;
    }

}

1 Ответ

1 голос
/ 22 июля 2010

(скопировано из комментария)

Hibernate имеет концепцию NamingStrategy, но он не зависит от того, является ли объект PK или обычным столбцом, так что он не будет иметь никакого смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...