gpt4 book ai didi

java - JPA + hibernate : How to define a constraint having ON DELETE CASCADE

转载 作者:可可西里 更新时间:2023-11-01 06:28:09 28 4
gpt4 key购买 nike

我只是想知道是否有这样一种方法可以将我的 MySQL 表构建为

ALTER TABLE `USERINFO`
ADD CONSTRAINT `FK_USER_ID` FOREIGN KEY (`USERID`) REFERENCES `USERACCOUNT` (`USERID`)
ON DELETE CASCADE
ON UPDATE CASCADE;

但是,当 hibernate++ jpa 开始构建具有“<property name="hibernate.hbm2ddl.auto" value="create" />”的表时,我才在我的 DDL 中得到这个

ALTER TABLE `USERINFO` ADD CONSTRAINT `FK_USER_ID` FOREIGN KEY (`USERID`) REFERENCES `USERACCOUNT` (`USERID`);

在我的类(class)中,我有这些注释设置,

// UserAcc.java
@Entity
@Table(name = "USERACC")
public class UserAcc implements Serializable {

private static final long serialVersionUID = -5527566248002296042L;

@Id
@Column(name = "USERID")
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer userId;


@OneToOne(mappedBy = "userAcc")
private UserInfo userInfo;
....


public UserInfo getUserInfo() {
return userInfo;
}
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
...

和,

// UserInfo.java
@Entity
@Table(name = "USERINFO")
public class UserInfo implements Serializable {

private static final long serialVersionUID = 5924361831551833717L;

@Id
@Column(name = "USERINFO_ID", nullable=false)
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer userInfoId;

@OneToOne(cascade = {CascadeType.ALL})
@JoinColumn(name="USERID", nullable=false)
@ForeignKey(name = "FK_USER_ID")
private UserAcc userAcc;


public Integer getUserInfoId() {
return userInfoId;
}

public void setUserInfoId(Integer userInfoId) {
this.userInfoId = userInfoId;
}
...

请注意,UserAccount 表是此处的父表/主表,而 UserInfo 是规范化为另一个实体的扩展表。任何答案将不胜感激。我只是很好奇它是如何完成的,因为我也喜欢在 MySQL 中工作。我真的习惯于从父表 (USERACOUNT) 中删除记录,这也允许我根据父表/主表中的特定记录通过子记录级联删除。

谢谢!

最佳答案

JPA 确实提供了 cascade 的可能性对关联实体的操作(合并、保留、刷新、删除)。逻辑在 JPA 中,不使用数据库级联。

@OneToMany(cascade=CascadeType.REMOVE)

没有符合 JPA 标准的方法来使用数据库级联进行级联。如果首选这样的级联,我们必须回退到 Hibernate 特定的构造:@OnDelete .它至少适用于 @OneToMany,但过去在 @OneToOne@OnDelete 中曾经存在一些问题。

@OnDelete(action = OnDeleteAction.CASCADE)

请注意,将此注释添加到现有约束不会对其进行更新。您可能必须先手动删除它才能正确更新架构。

关于java - JPA + hibernate : How to define a constraint having ON DELETE CASCADE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14875793/

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