Добавьте методы получения для user_id
и user_name
в вашем классе User
, Hibernate нуждается в них для доступа к ним.
public int getUser_id() {
return user_id;
}
public String getUser_name() {
return user_name;
}
В дополнение к вышесказанному:
Существует несколько различных стратегий сопоставления составных ключей, и похоже, что вы их смешиваете.
Поскольку вы определили класс составного ключа UserCompoundKey
и пометили его как @Embeddable
,
Вам не нужны аннотации класса:
@IdClass(UserCompoundKey.class)
@Id
@AttributeOverrides({
@AttributeOverride(name = "user_name",
column = @Column(columnDefinition="varchar(255) default 'no name'")),
@AttributeOverride(name = "user_id",
column = @Column(columnDefinition="int(255) NOT NULL AUTO_INCREMENT"))
})
Удалить эти аннотации из User
.
Вам также не нужны поля:
private int user_id;
private String user_name;
в User
, так как эти поля уже содержатся в вашем UserCompoundKey
классе. Удалите их также.
Затем вам просто нужно добавить новое поле в 'User', чтобы отобразить ключ класса составного ключа, который вы уже определили:
@Id
private UserCompoundKey compoundId;
Наконец, не забудьте добавить геттер и сеттер в User
для нового поля.