gpt4 book ai didi

java - 如何在 JPA 中获取外键引用以具有 "ON UPDATE CASCADE ON DELETE CASCADE"功能?

转载 作者:行者123 更新时间:2023-11-29 16:02:36 30 4
gpt4 key购买 nike

至少在过去的 6 个小时里我一直在不停地愚弄这个问题,但我就是不明白问题是什么。我在 SpringBoot 项目中设置了两个类(User 和 Item),这两个类之间具有双向关系,如下所示:

  • @OneToMany 从用户到项目的关系(一个用户可以拥有多个项目)
  • 从项目到用户的 @ManyToOne 关系(每个项目只有一个用户)

这是我的用户类:

@Data
@Entity
@AllArgsConstructor
@Table(name="users")
public class User implements Serializable {

@Id
private @NotNull String id;
private @NotNull String username;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.owner", cascade = CascadeType.ALL)
private List<Item> ownedItems;

...
}

这是我的 Item 类(使用复合主键):

@Data
@Entity
@AllArgsConstructor
@Table(name="items")
public class Item implements Serializable {


@Data
@Embeddable
public static class PrimaryKey implements Serializable {

private @NotNull String id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(
name="user_id",
referencedColumnName = "id",
foreignKey = @ForeignKey(name = "FK_Item_UserID"),
nullable = false, // I have tried using these
updatable = false, // and excluding these and
insertable = false // that changes nothing
)
private @NotNull User owner;
}


@EmbeddedId
private @NotNull PrimaryKey pk;

private @NotNull String name, item_condition, categories;
private @NotNull LocalDateTime postDate;
}

问题是 Hibernate 创建的表(由 SQL 查询“SHOW CREATE TABLE items”返​​回的是这样的:

CREATE TABLE `items` (
`id` varchar(255) NOT NULL,
`categories` varchar(255) NOT NULL,
`item_condition` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`post_date` datetime NOT NULL,
`user_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`,`user_id`),
KEY `FK_Item_UserID` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

请注意,外键引用只是一个 KEY 而不是 FOREIGN KEY。下一个问题是它在更新或删除时不执行任何操作,这是一个大问题。我希望该表的外键如下所示:

FOREIGN KEY ('user_id') REFERENCES Users('id') ON UPDATE CASCADE ON DELETE CASCADE

谁能向我解释如何实现这一目标以及为什么我所拥有的不起作用?

最佳答案

已解决

@danblack 告诉我需要将引擎更改为“Innodb”。我通过将 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect 添加到我的 application.properties 文件中来完成此操作。

感谢@danblack!

关于java - 如何在 JPA 中获取外键引用以具有 "ON UPDATE CASCADE ON DELETE CASCADE"功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56052622/

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