【问题标题】:Hibernate Code Generation and @Cascade({CascadeType.ALL})Hibernate 代码生成和@Cascade({CascadeType.ALL})
【发布时间】:2015-02-20 08:33:07
【问题描述】:

请考虑以下 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注解?

【问题讨论】:

    标签: java mysql hibernate


    【解决方案1】:

    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;
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 2017-05-18
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      • 2010-12-26
      相关资源
      最近更新 更多