java - 休眠:不能删除外键
问题描述
有这两个类:
地址.java:
@Embeddable
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Address {
private String street;
private String city;
private String state;
private String pincode;
}
用户.java:
@Entity
@Data
public class User {
@Id
private int id;
private String name;
@ElementCollection
private Set<Address> addresses = new HashSet<>();
}
演示应用程序.java:
@Bean
CommandLineRunner dataLoader2(UserRepository userRepo){
return new CommandLineRunner() {
@Override
public void run(String... args) throws Exception {
User u = new User();
u.setName("Some random name");
Address a1 = Address.builder()
.street("First Street")
.city("first city")
.state("first state")
.pincode("100001")
.build();
Address a2 = Address.builder()
.street("Second Street")
.city("Second city")
.state("second state")
.pincode("200002")
.build();
u.setAddresses(new HashSet<>(Arrays.asList(a1, a2)));
userRepo.save(u);
}
};
}
运行时,如果失败并出现此错误:
GenerationTarget 遇到异常接受命令:通过 JDBC 语句执行 DDL“alter table user_addresses drop foreign key FKfm6x520mag23hvgr1oshaut8b”时出错
然而,决赛桌已创建
describe user_addresses
:
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| user_id | int | NO | MUL | NULL | |
| city | varchar(255) | YES | | NULL | |
| pincode | varchar(255) | YES | | NULL | |
| state | varchar(255) | YES | | NULL | |
| street | varchar(255) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
describe user
:
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
为什么 jdbc 不能删除user_id
表中的外键user_addresses
?如何让jdbc这样做呢?
解决方案
“USER”是 MySQL 中的保留字,这可能是问题的根本原因。更改User
实体的名称或@Table
为其添加注释并定义不同的名称。
参考文档:
推荐阅读
- java - Java 中的 CMAC-AES (RFC 4493) 计算
- python - 在烧瓶项目中运行分子 bash 命令
- c# - Outlook 项目导致 AftwerWrite 事件不可用
- javascript - 检查一个类型是否作为另一种类型的属性存在
- r - 将传递给 enquos 的值导出为格式 name1、name2、nameN、
- sql-server - 如何从链接服务器的两个不同表中获取数据
- python - Django Rest Framework 星级评分系统
- kubernetes - 如何展平从 configMapGenerator 生成的 configMap?
- java - 在 Java 中填充多维数组
- javascript - 异步调用链,其中最后一个调用比较第一个调用的内容