Я ищу способ установить сопоставление «по умолчанию», которое 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;
}
}