Здесь приведен сокращенный фрагмент, без учета деталей IdClass. У меня возникла проблема с определением таблиц:
ClientPersonalityModel
(
client_id int not null,
personality_trait_id int not null,
personality_type_id int not null,
primary key (client_id, personality_trait_id, personality_type_id)
)
И класс:
@Entity
public class ClientPersonalityModel
{
@Id
@ManyToOne
@JoinColumn(name="client_id")
protected ClientModel client;
@Id
@ManyToOne
@JoinColumns({
@JoinColumn(name="personality_trait_id",referencedColumnName="id"),
@JoinColumn(name="personality_type_id",referencedColumnName="personality_type_id")
})
protected ClientPersonalityTraitModel trait;
}
Но постоянная структура пытается использовать столбцы CLIENT_ID, TRAIT_ID, TRAIT_PERSONALITY_TYPE_ID.
Почему имена @JoinColumn игнорируются?
Выдает исключение:
Начальный sessionFactory creationfailed.org.hibernate.MappingException: невозможно найти логическое имя столбца из физического имени personal_type_id в таблице client_personalities
java.lang.ExceptionInInitializerError
Вызвано: org.hibernate.MappingException: невозможно найти логическое имя столбца из физического имени personal_type_id в таблице client_personalities
Этот случай рассматривается во многих примерах, но без переопределения имен столбцов.
Пример:
Листинг 10-12. Проект с зависимым идентификатором
@Entity
@IdClass(ProjectId.class)
public class Project {
@Id private String name;
@Id
@ManyToOne
private Department dept;
// ...
}
из Pro JPA 2 (ISBN 978-1-4302-1956-9 / 978-1-4302-1957-6)