在某些情況下,你可以使用本機查詢來更新類別像這樣(assumably收集表名是item_categories
):
UPDATE {h-schema}item_categories SET name=:name WHERE item_id = :itemId
但我懷疑,這將是可能的,或者這使得一點意義。一切都取決於你的模式是如何創建的。如果讓Hibernate生成模式(不推薦),並且繼續使用@Column(nullable=false)
作爲類別名稱列,Set
作爲@ElementCollection
繼續使用,這是不可能的,因爲Hibernate會生成以下PK/UNIQUE約束(用於例如在PostgreSQL的):
CREATE TABLE public.item_categories
(
item_id bigint NOT NULL,
name character varying(255) NOT NULL,
CONSTRAINT item_categories_pkey PRIMARY KEY (item_id, name),
CONSTRAINT fkjfe6s3h4bfur817d80v7aori8 FOREIGN KEY (item_id)
REFERENCES public.item (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
爲生成的模式可能調整:
隨着自動生成的模式,您可以通過不使用@Column(nullable=false)
對日避免約束的創建e分類名稱欄或使用List
作爲您的@ElementCollection
。
手動創建的模式可能調整:
如果是手動創建您的架構(推薦的)只是要小心,沒有對採集表(item_id, name)
的兩列沒有複合PK /唯一約束。否則將無法更新該組合。
但是,也許應用此更改/更新所有類別名稱是沒有用的。你真的想在單個項目的所有類別上使用相同的名稱嗎? equals()
和hashCode()
如何在Category類上實現?也許你的集合在該操作之後每個項目只包含一個類別。
因爲類別不存在於自己的表中,那麼顯然你不能這樣做。因爲一個類只存在於它的所有者對象的上下文中,所以'merge'就是你所做的 –