Как сопоставить отдельную коллекцию (список, набор) или сопоставить с гибернацией с помощью аннотаций

#java #hibernate

#java #гибернация

Вопрос:

Я знаю, что есть способ сопоставить карту с помощью XML:

  <set name="images"
 table="ITEM_IMAGE"
 order-by="IMAGENAME asc">
 <key column="ITEM_ID"/>
 <composite-element class="Image">
 <property name="name" column="IMAGENAME" not-null="true"/>
 <property name="filename" column="FILENAME" not-null="true"/>
 <property name="sizeX" column="SIZEX" not-null="true"/>
 <property name="sizeY" column="SIZEY" not-null="true"/>
 </composite-element>
</set>
  

Есть ли способ сделать то же самое с помощью сопоставления аннотаций и как сохранить его в отдельной таблице?

Это много!

Ответ №1:

Для составных значений или базовых типов это должно быть почти одинаково, сначала вам нужно сообщить hibernate, что мы сопоставляем с коллекцией, затем указать имя таблицы, в которой должна храниться ваша карта, и столбец соединения с вашим текущим объектом, затем вы указываете ключ.

          @Entity
         public class Item {
              @Id
              @GeneratedValue(strategy = GenerationType.AUTO)
              @Column(name = "Item_ID")
               private Long itemId;

              @ElementCollection
              @CollectionTable(name="ITEM_IMAGE",     joinColumns=@JoinColumn(name="ITEM_ID"))
              @MapKeyColumn(name="ITEM_ID")
              private Map<String, Image> contacts = new HashMap<String, Image>();
              }

              @Embeddable
              public class Image {
               //Specify your composite attributes with the column name for each
              }
  

надеюсь, я ничего не пропустил

Комментарии:

1. Спасибо, но как я должен сохранить эту карту в своей базе данных? Должен ли я поместить ее в какую-либо сущность или есть способ сохранить ее другим способом?

2. он должен быть в объекте, у которого есть этот список (объект с первичным ключом ITEM_ID)

3. Не были бы вы так любезны написать для меня полный пример?