Ошибка, которую вы получите:
Использование @OneToMany или @ManyToMany для таргетинга на не отображенный класс: fwl.domain.model.PerformanceRating.rewardAmountByProgressMap [ java.lang.Integer ]
относится к тому факту, что с такими аннотациями, как @OneToMany
и @ManyToMany
, вы говорите, что декларирующий класс (PerformanceRating
) находится в отношении многие ко многим со значением вашей карты , Integer
что глупо .
Значением вашей карты должна быть сущность, ключом которой должен быть идентификатор, с помощью которого вы можете идентифицировать одну из тех сущностей, которые содержит ваша карта (на самом деле ключ должен быть только уникальным, я думаю, это не обязательно фактический идентификатор).
Я действительно не знаю, как выглядит ваш стол, но если ваш PerformanceRating
(для простоты назовем его просто Rating
) выглядит так:
rating
============
id int(11) PK
и ваш Progress
стол вот так:
progress
============
id int(11) PK
amount int(11)
с таблицей, соединяющей их следующим образом:
progress_has_rating
============
progress_id int(11) PK
rating_id int(11) PK
тогда вы можете отобразить их следующим образом:
@Entity @Table class Rating {
@Id long id;
@ManyToMany(targetEntity = Progress.class,
cascade = CascadeType.ALL,
fetch = FetchType.EAGER)
@JoinTable(name = "progress_has_rating",
joinColumns = {@JoinColumn(name = "rating_id",
referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "progress_id",
referencedColumnName = "id")})
Set<Progress> progresses;
}
@Entity class Progress {
@Id long id;
@Basic long amount;
}
(Вполне возможно, что я переключил имена столбцов в аннотациях @JoinColumn
, которые действительно будут работать; я всегда включаю их.)
(Правка: да, я их переключил - исправлено.)
Если ваше свойство amount
находится в вашей таблице соединений, то вам также потребуется создать класс сущностей для этого. Я думаю, что невозможно обойти .
Если вы действительно хотите использовать карты, то Hibernate может справиться с этим. См. Раздел Отображение коллекции (в частности, раздел 7.2.2.2) о том, как отобразить карты . Тем не менее, значения на вашей карте должны быть какими-то объектами.