【发布时间】:2021-11-01 08:43:59
【问题描述】:
有这两个类:
Address.java:
@Embeddable
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Address {
private String street;
private String city;
private String state;
private String pincode;
}
User.java:
@Entity
@Data
public class User {
@Id
private int id;
private String name;
@ElementCollection
private Set<Address> addresses = new HashSet<>();
}
DemoApplication.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 遇到异常接受命令:错误 执行 DDL "alter table user_addresses drop foreign key FKfm6x520mag23hvgr1oshaut8b" 通过 JDBC 语句
然而,决赛桌已经创建:
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_addresses 中删除外键 user_id?如何让jdbc这样做?
【问题讨论】:
-
您使用的是哪个数据库?
-
如果从命令行客户端运行该 DDL 会发生什么?您收到更好的错误消息了吗?
-
@JoãoDias mysql
-
@tgdavies在mysql客户端,正确通过(即外键成功drop)
标签: java spring hibernate jdbc