2015-08-04 3 views
0

Я использую Hibernate со следующими классами и базой данных MySQL.Hibernate меняет имя моего поля

@Entity 
@Table(name="Student") 
public class Student { 

    @Id 
    @GeneratedValue 
    private int student_id; 

    private String student_name; 

    @ManyToOne(cascade=CascadeType.ALL) 
    private StudentAddress address; 

    @Transient 
    @Temporal(TemporalType.DATE) 
    private Date birthDay; 

    public Student() { 
    } 

    public Date getBirthDay() { 
     return birthDay; 
    } 

    public void setBirthDay(Date birthDay) { 
     this.birthDay = birthDay; 
    } 

    public int getStudent_id() { 
     return student_id; 
    } 

    public void setStudent_id(int rollNo) { 
     this.student_id = rollNo; 
    } 

    public String getStudent_name() { 
     return student_name; 
    } 

    public void setStudent_name(String name) { 
     this.student_name = name; 
    } 

    public StudentAddress getAddress() { 
     return address; 
    } 

    public void setAddress(StudentAddress address) { 
     this.address = address; 
    } 
} 

@Entity 
@Table(name="student_address") 
public class StudentAddress { 

    @Id 
    @GeneratedValue 
    private int address_id; 

    private String address_detail; 

    public int getAddress_id() { 
     return address_id; 
    } 

    public void setAddress_id(int address_id) { 
     this.address_id = address_id; 
    } 

    public String getAddress_detail() { 
     return address_detail; 
    } 

    public void setAddress_detail(String address_detail) { 
     this.address_detail = address_detail; 
    } 
} 

Я получаю следующее сообщение об ошибке из этих операторов SQL:

Hibernate: insert into student_address (address_detail) values (?) 
Hibernate: insert into Student (address_address_id, student_name) values (?, ?) 

Сообщение об ошибке:

Unknown column '**address_address_id'** in 'field list' 

Моя база данных имеет имя поля address_id.

Hibernate сохраняет добавление address до address_id и изменяет имя столбца. Возможно, я бы сменил имя поля от address до address_address_id в моей базе данных, но что вызывает это. Является ли это допустимым поведением в Hibernate и могу ли я его изменить?

ответ

1

Это default column name Hibernate использует для @ManyToOne ассоциации:

По умолчанию (только если используется один присоединиться к колонке): The конкатенации следующее: имя ссылающегося собственности отношений или области ссылочный объект или внедряемый класс ; "_"; имя ссылочного столбца первичного ключа. Если в объекте есть , это свойство ссылки или поля привязки или , если соединение является для коллекции элементов, имя столбца объединения равно , сформированное как объединение следующего: имя объекта; "_"; имя ссылочного столбца первичного ключа.

Чтобы указать нужное имя столбца:

@ManyToOne(cascade=CascadeType.ALL) 
@JoinColumn(name="address") 
private StudentAddress address; 
+0

Это решило мою проблему. Большое спасибо. Я потратил около 1,5 часов, пытаясь понять это. – abujafar

Смежные вопросы