良い時間。
FOLDERSとFOLDER_TYPESの 2 つの DB テーブルがあるとします。
CREATE TABLE FOLDERS (
ID VARCHAR2(50 BYTE) NOT NULL,
NAME VARCHAR2(4000 BYTE) NOT NULL,
DESCRIPTION VARCHAR2(4000 BYTE),
FOLDER_TYPE_ID VARCHAR2(50 BYTE) NOT NULL,
PARENT_FOLDER_ID VARCHAR2(50 BYTE)
)
CREATE TABLE FOLDER_TYPES (
ID VARCHAR2(50 BYTE) NOT NULL,
NAME VARCHAR2(50 BYTE) NOT NULL,
DESCRIPTION VARCHAR2(4000 CHAR)
)
ご覧のとおり、FOLDERSテーブルのFOLDER_TYPE_ID列にはNOT NULL制約があります。
これらのテーブルの Hibernate のエンティティは次のとおりです。
@Entity
@Table(name = "folders")
public class Folder implements Serializable {
private static final long serialVersionUID = 1856858081142422000L;
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "[ID]")
private String id;
@Column(name = "[NAME]")
private String name;
@Column(name = "[DESCRIPTION]")
private String description;
@ManyToOne
@JoinColumn(name = "folder_type_id")
private FolderType type;
...
と
@Entity
@Table(name = "folder_types")
public class FolderType implements Serializable{
private static final long serialVersionUID = -7992732910184226857L;
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "[ID]")
private String id;
@Column(name = "[NAME]")
private String name;
@Column(name = "[DESCRIPTION]")
private String description;
問題は、Folder オブジェクトを削除すると、DB から実際に削除する前に、Hibernate は参照 (フォルダー タイプ) に null 値を設定しようとしますが、制約があるため、例外がスローされることです。回避策として、制約を削除できますが、それが必要で、テーブル ( FOLDERS ) を変更できない場合はどうすればよいですか?
エンティティをnull参照に更新しないようにHibernateを言う方法はありますか? Folder エンティティで (FolderType タイプ) に設定しようとしましupdatable = false
たが、うまくいきませんでした...@JoinColumn