Когда в базу данных сохраняется сущность, в которой есть поле-коллекция, это поле обязано быть помеченным одной из аннотаций.
@OneToMany и @ManyToMany хранят вложенные объекты как отдельные полноценные сущности – для них действуют всё те же требования, которые JPA выдвигает для всех
@Entity
классов. Каждая из аннотаций отвечает за свое отношение.@ElementCollection создает коллекцию встраиваемых классов. Применять её можно только на коллекции, тип элементов которых помечен
@Embeddable
, или входит в список стандартных встраиваемых классов (обертки примитивов, строки, даты, и т.д.).На уровне хранения в реляционной базе, для
@ElementCollection
будет также создана отдельная таблица. Технически она будет находиться в отношении one-to-many.Но из Java кода коллекция будет выглядеть встроенной: её элементом не нужно иметь собственные id, ими нельзя манипулировать отдельно от основной сущности. Единственное, чем такая коллекция отличается от встроенного поля-примитива – её можно загружать лениво (включено по умолчанию).