#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. Не были бы вы так любезны написать для меня полный пример?