Я не очень знаком с JPA или Hibernate.Я беру на себя чужой код и просто пытаюсь заставить его работать прямо сейчас.Учитывая мое ограниченное понимание, я постараюсь быть как можно более конкретным, не утонув в ненужных деталях.
У меня есть исключение времени выполнения для "org.hibernate.HibernateException: отсутствует столбец: имя в public.sessions«.Вот основная организация этой части приложения:
@Entity
@Table(name = "sessions")
public class Session {
@ManyToOne
@JoinColumns({
@JoinColumn(name = "article_name",
referencedColumnName = "article_name",
insertable = false, updatable = false),
@JoinColumn(name = "group_name",
referencedColumnName = "name",
insertable = false, updatable = false) })
private Group group;
...
}
@Entity
@Table(name = "groups")
public class Group {
...
}
А вот соответствующие таблицы.Схема намного более сложна, чем эта (также не подлежит обсуждению - я не могу изменить нашу существующую базовую линию), но это соответствующие таблицы / столбцы.
sessions
--------
article_name
group_name
...
groups
--------
article_name
name
...
Как видите,имя столбца имени группы отличается в двух таблицах.Хотя я не очень разбираюсь в JPA, я подумал, что использование свойства "referencedColumnName" позволило учесть эту разницу при объединении двух столбцов с разными именами.Однако выполнение с этим кодом приводит к исключению «Отсутствует столбец: имя в public.sessions».Если я переключаю значения свойств «name» и «referencedColumnName» для второй аннотации @JoinColumn (в результате чего name = «name», referencedColumnName = «group_name»), я получаю исключение «org.hibernate.MappingException: невозможнонайдите столбец с логическим именем: group_name в группах. "
Я нашел довольно много примеров в Интернете, которые, кажется, делают нечто подобное, но по какой-то причине я не могу заставить это работать.Что бы это ни стоило, этот код работал нормально, но, как мы выяснили, это связано с тем, что Hibernate был настроен на обновление таблицы по мере необходимости (поэтому в таблицу сессий был добавлен столбец «имя»).Как только мы изменили свойство «hbm2ddl.auto» на «validate», мы начали получать эту ошибку.Из-за этого, я думаю, что проблема всегда существовала, мы просто не заметили ее, потому что добавлялся столбец.
Заранее спасибо за любую помощь.