Java Hibernate代码生成和@Cascade({CascadeType.ALL}) 请考虑以下MySQL表: CREATE TABLE storeman.user ( id INT NOT NULL AUTO_INCREMENT, email VARCHAR(50) NOT NULL, display_name VARCHAR(50), password CHAR(32), ... PRIMARY KEY (id), UNIQUE INDEX (email) ); CREATE TABLE storeman.user_preferences ( id INT NOT NULL AUTO_INCREMENT, notify_login BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (id), CONSTRAINT fk_user_preferences FOREIGN KEY (id) REFERENCES user (id) ON DELETE CASCADE );

Java Hibernate代码生成和@Cascade({CascadeType.ALL}) 请考虑以下MySQL表: CREATE TABLE storeman.user ( id INT NOT NULL AUTO_INCREMENT, email VARCHAR(50) NOT NULL, display_name VARCHAR(50), password CHAR(32), ... PRIMARY KEY (id), UNIQUE INDEX (email) ); CREATE TABLE storeman.user_preferences ( id INT NOT NULL AUTO_INCREMENT, notify_login BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (id), CONSTRAINT fk_user_preferences FOREIGN KEY (id) REFERENCES user (id) ON DELETE CASCADE );,java,mysql,hibernate,Java,Mysql,Hibernate,正如您可能看到的,这两个表之间存在一对一的关系。 当运行Hibernate代码生成器时,我得到以下信息(仅相关部分) 问题是,当我保存用户实体时,链接的UserPreferences不会自动保存。解决这个问题很容易: @OneToOne(fetch = FetchType.LAZY, mappedBy = "user") @Cascade({CascadeType.ALL}) public UserPreferences getUserPreferences(){ return this

正如您可能看到的,这两个表之间存在一对一的关系。 当运行Hibernate代码生成器时,我得到以下信息(仅相关部分)

问题是,当我保存用户实体时,链接的UserPreferences不会自动保存。解决这个问题很容易:

@OneToOne(fetch = FetchType.LAZY, mappedBy = "user")
@Cascade({CascadeType.ALL})
public UserPreferences getUserPreferences(){
    return this.userPreferences;
};
但是,如果出于任何原因,我必须再次重新运行Hibernate代码生成器,@Cascade({CascadeType.ALL})将消失,这是危险的,因为我依赖于链接表会自动保存在代码中这一事实。
所以问题是:有没有办法在上面修改mySQL脚本,以便在运行hibernate反向工程代码生成时,自动添加@Cascade注释?

mySQL物理表除了外键之外,没有提到任何关于级联的内容。只有它可以在删除更新时添加到删除级联

然后运行Hibernate代码生成器,CascadeType和@Cascade定义不会转换为DDL

尽量使用jpa注释

@OneToOne(fetch = FetchType.LAZY, mappedBy = "user",cascade= CascadeType.ALL)
public UserPreferences getUserPreferences(){
    return this.userPreferences;
};
@OneToOne(fetch = FetchType.LAZY, mappedBy = "user",cascade= CascadeType.ALL)
public UserPreferences getUserPreferences(){
    return this.userPreferences;
};