gpt4 book ai didi

java - Hibernate 代码生成和@Cascade({CascadeType.ALL})

转载 作者:行者123 更新时间:2023-11-29 00:03:27 25 4
gpt4 key购买 nike

请考虑以下 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
);

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

@Entity
@Table(name = "user", catalog = "storeman", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User implements java.io.Serializable {
...
@OneToOne(fetch = FetchType.LAZY, mappedBy = "user")
public UserPreferences getUserPreferences(){
return this.userPreferences;
};
...
}

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

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

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

最佳答案

除了外键外,mySql 物理表没有说明任何关于级联的信息。只有它可以添加 ON DELETE CASCADE ON DELETE UPDATE。

然后你运行Hibernate Code Generator,CascadeType和@Cascade定义没有被翻译成DDL

尽量使用jpa注解。

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

关于java - Hibernate 代码生成和@Cascade({CascadeType.ALL}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28624615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com