Пытаюсь соединиться с бд используя hibernate. Есть 6 таблиц(2 из них для связи ManyToMany) и 4 POJO класса с JPA-мапингом.
Падает с такой ошибкой:
org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: model.pojo.City.hotels
Вот POJO класс в котором ошибка:
@Entity
@Table(name="CITY")
public class City implements Comparable<City>, Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "sequnce_id_generator_city")
@SequenceGenerator(name = "sequnce_id_generator_city", sequenceName = "SEQ_FOR_CITY_ID")
@Column (name="ID")
private int id;
@Column (name="NAME")
private String name;
@OneToMany(targetEntity=Hotel.class, mappedBy="city")
private HashSet<Hotel> hotels = new HashSet();
@ManyToOne
@JoinColumn(name="COUNTRY", nullable=false)
private Country country;
Вот pojo на который ссылается:
@Entity
@Table(name = "HOTEL")
public class Hotel implements Comparable<Hotel>, Serializable {
@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String name;
@Column(name = "STARS")
private int stars;
@Column(name = "DESCRIPTION")
private String description;
@ManyToOne
@JoinColumn(name = "COUNTRY", nullable=true)
private Country country;
@ManyToOne
@JoinColumn(name = "CITY", nullable=true)
private City city;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name="HOTEL_TOUR_OPERATOR",
joinColumns = @JoinColumn(name="HOTEL_ID"),
inverseJoinColumns = @JoinColumn(name="TOUR_OPERATOR_ID"))
private Set<Operator> operator = new HashSet();
Ошибка говорит о том что model.pojo.City.hotels
должен быть коллекцией. Или я чего то не понял?
Объявите поле с абстрактным типом:
private Set<Hotel> hotels = ...
Из документации Hibernate
2.8. Collections
...
Hibernate uses its own collection implementations which are enriched with lazy-loading, caching or state change detection semantics. For this reason, persistent collections must be declared as an interface type. The actual interface might be java.util.Collection
, java.util.List
, java.util.Set
, java.util.Map
, java.util.SortedSet
, java.util.SortedMap
or even other object types (meaning you will have to write an implementation of org.hibernate.usertype.UserCollectionType
).
Вольный перевод:
2.8. Коллекции
...
Hibernate использует собственные реализации коллекций, в которые добавлены ленивая загрузка, кэширование и семантика изменения состояний. По этой причине сохраняемые коллекции должны быть объявлены с типом-интерфейсом. Могут быть использованы java.util.Collection
, java.util.List
, java.util.Set
, java.util.Map
, java.util.SortedSet
, java.util.SortedMap
. Другие типы тоже можно использовать, но в этом случае вам придется реализовать org.hibernate.usertype.UserCollectionType
.
Иными словами Hibernate подставит в hotels
свою реализацию Set
. Писать служебные коллекции под всевозможные реализации множества (HashSet
, TreeSet
, и т.д и т.п.) в данном случае неоптимально.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ЗдравствуйтеУ меня есть HashMap, в котором находится 10 пар "ключ-значение"
Доброго времени сутокЕсть код, который проводит некоторые операции с числами типа double а потом выводит их на экран
Всем привет! Собираю кастомную прошивку, портирую функции в неё, у меня есть вопрос по данному коду:
Есть ли реализация обтекания текста в разметке xml в контейнере Constraint, без программной реализации, если только программное, не подскажите...