0
JPQL:約束錯誤
delete from Session where deviceId=:deviceId and username=:username
錯誤:
org.hibernate.engine.jdbc.spi.SqlExceptionHelper: ERROR: update or delete on table "edge_session" violates foreign key constraint "fkh7j6o58rfwfumainodrxptobt" on table "session_contactmethods"
會話類:
@Entity
@Table(name="EDGE_SESSION")
public class Session {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ElementCollection(targetClass=ContactMethod.class)
@Enumerated(EnumType.STRING)
private Set<ContactMethod> contactMethods;
...
}
我應該添加特定CascadeTypes到contactMethods場?因爲外表持有一個枚舉,我假設刪除應該可以不發生,因爲我希望枚舉的列表保留下來?
編輯:看起來好像它創建的session_contactmethods表不僅僅是枚舉值,而是與會話的連接鍵。
# \d session_contactmethods
Table "public.session_contactmethods"
Column | Type | Modifiers
----------------+------------------------+-----------
session_id | bigint | not null
contactmethods | character varying(255) |
Foreign-key constraints:
"fkh7j6o58rfwfumainodrxptobt" FOREIGN KEY (session_id) REFERENCES edge_session(id)
# select * from session_contactmethods;
session_id | contactmethods
------------+----------------
1 | EMAIL
1 | TELEPHONE
2 | TELEPHONE
2 | EMAIL
(4 rows)
session_contactmethods聽起來像連接表嗎?或者它是從字面上持有ContactMethod枚舉/實體的表? – Gimby
那枚枚舉表如何保留?它們完全依賴所有者......會話對象。 PS,你不需要在該領域的「targetClass」,你有泛型定義它 –
是的,我現在明白了,認爲可能有另一個表涉及。無論如何,我怎麼才能讓刪除工作呢?它是否需要額外的級聯註釋...我認爲這不是必需的? – rich