猿问

多对多删除集 NULL

我在连接表中具有附加列的用户和组之间存在多对多关系。它看起来像这样:

当我删除一个用户时,它应该从 user_to_group(有效)中删除他的所有引用,并且他创建的所有组都应该保留,并将其 created_by 字段更新为 NULL(这不会发生,所有条目都被删除)。


模式的 DDL:


CREATE TABLE user (

    user_id int NOT NULL AUTO_INCREMENT,

    first_name varchar(100) NOT NULL,

    last_name varchar(100) NOT NULL,

    username varchar(100) NOT NULL,

    email_address varchar(100) UNIQUE NOT NULL,

    phone_number varchar(100) NOT NULL,

    password varchar(255) NOT NULL,

    notification_type varchar(30) NOT NULL DEFAULT "email",

    date_created datetime NOT NULL,

    is_active bool NOT NULL DEFAULT false,

    CONSTRAINT user_pk PRIMARY KEY (user_id)

);


CREATE TABLE `group` (

    group_id int NOT NULL AUTO_INCREMENT,

    name varchar(100) NULL,

    date_created datetime NOT NULL,

    is_private bool NOT NULL DEFAULT false,

    created_by int NULL,

    CONSTRAINT group_pk PRIMARY KEY (group_id),

    CONSTRAINT group_user_fk FOREIGN KEY(created_by)

        REFERENCES user (user_id) ON DELETE SET NULL

);


CREATE TABLE user_to_group (

    user_id int NOT NULL,

    group_id int NOT NULL,

    user_type_id int NOT NULL,

    is_blocked bool NOT NULL DEFAULT false,

    CONSTRAINT user_to_group_pk PRIMARY KEY (user_id,group_id),

    CONSTRAINT user_to_group_group_fk FOREIGN KEY(group_id)

        REFERENCES `group` (group_id),

    CONSTRAINT user_to_group_user_type_fk FOREIGN KEY(user_type_id)

        REFERENCES user_type (id),

    CONSTRAINT user_to_group_user_fk FOREIGN KEY(user_id)

        REFERENCES user (user_id)

);


倚天杖
浏览 175回答 1
1回答

跃然一笑

@ManyToOne(fetch = FetchType.LAZY,        cascade = CascadeType.ALL)@MapsId("groupId")@JoinColumn(name = "group_id", insertable = false, updatable = false)private Group group;excludeCascadeType.REMOVE和 group 将完好无损。
随时随地看视频慕课网APP

相关分类

Java
我要回答