adadadadadadadc 2017-08-14 15:23 采纳率: 0%
浏览 388

hibernate 多对一配置了级联,但是生成的表外键却没有级联关系

@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
    @OnDelete(action = OnDeleteAction.CASCADE)
    @JoinColumn(name="message_id")
    public Message getMessage() {
        return message;
    }

只是生成这个,删除会包外键异常
CONSTRAINT FK98F93A0F84BDA94 FOREIGN KEY (message_id) REFERENCES be_message (id)

为什么不应该是这样的
CONSTRAINT FK98F93A0F84BDA94 FOREIGN KEY (message_id) REFERENCES be_message (id) ON DELETE CASCADE,

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-06 09:27
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Hibernate中,cascade属性用于指定当实体对象被删除时,其关联对象(即另一方)的状态。如果设置为CascadeType.ALL,则所有关联的对象都会被一起删除。

    然而,你提到的问题是,当你使用@OnDelete(action = OnDeleteAction.CASCADE)注解时,Hibernate并没有按照你的期望来处理on delete cascade语句。

    这是因为Hibernate默认不会将cascade属性应用于嵌套关联。这意味着如果你想要实现多对一的关系,那么你可能需要手动添加cascade属性到Message类上,或者通过其他方式来管理关联关系。

    例如,你可以创建一个名为Message的子类,并重写getMessages()方法:

    public class Message extends BaseEntity {
        private List<Message> messages;
    
        // ...
    }
    

    然后,在Message类的构造函数中初始化messages字段:

    public Message(List<Message> messages) {
        this.messages = messages;
    }
    

    这样,当Message实例被删除时,它的messages列表也会一同被删除。

    评论

报告相同问题?