当前位置: 首页 > 知识库问答 >
问题:

Hibernate:无法删除外键

史烈
2023-03-14

有这两个类:

ddress.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<>();
}

演示应用程序。爪哇:

@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“更改表user_addresses删除外键FKfm6x520mag23hvgr1oshaut8b”时出错

然而,最终的表格被创建:描述用户地址

+---------+--------------+------+-----+---------+-------+
| 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    |       |
+---------+--------------+------+-----+---------+-------+

描述用户

+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int          | NO   | PRI | NULL    |       |
| name  | varchar(255) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

为什么jdbc不能删除表user\u addresses中的外键user\u id?如何让jdbc做到这一点?

共有1个答案

卢骏俊
2023-03-14

"USER"是MySQL中的保留字,这可能是问题的根本原因。请更改User实体的名称,或向其添加@Table注释,并定义不同的名称。

参考文件:

  • https://dev.mysql.com/doc/refman/5.7/en/keywords.html
  • https://dev.mysql.com/doc/refman/8.0/en/keywords.html
 类似资料:
  • EventLicensetype.hbm.xml文件: 下面是EventInfo类。同样,在实际文件中有更多的字段,这只是重要的部分: 下面是EventLicenseType类 为什么它不能直接删除记录?为什么它要更新??我还尝试将代码更改为下面的代码,并得到相同的错误。 谁能帮我解决我缺少的东西,或者给我指明正确的方向?

  • 我还在学习hibernate中的很多东西,以及如何处理hibernate中表与表之间的关系,所以在我的一个项目中,我面临着以下问题: 问题出在哪里? 我想做什么? 我正在尝试删除package实体,但不删除package表中引用的用户 我正在通过packageDAO对package实体调用delete

  • 我在这里使用了多对一双向关系,一旦我被放入数据库,我就不能删除文件,如果我试图删除,我会遇到异常,无法删除或更新父行:外键约束失败。 这是我的另一个实体类... 嗨这是我的完整栈迹

  • 我在表中添加了一列(下面的查询) 现在我想删除这个专栏(fk_job_id)。我尝试了这些查询,但它们给出了错误。 第一个Alter语句给出的错误为-(但该列存在)。 第二个Alter语句给出错误,因为-

  • 我有父实体和一个方向作为具有关系的子实体。我尝试使用Hibernate查询删除超过一周的广告,但得到的结果是: com.mysql.jdbc.exceptions.jdbc4.mysqlintegrityConstraintViolationException:无法删除或更新父行:外键约束失败(.,constraint外键()引用() 用户: 筛选器: 广告: DAO删除方法:

  • 在MySQL中,我想删除一个表。 我尝试了很多方法,但我总是得到一个错误,即不能删除名为的表。这是我得到的错误: #1217-无法删除或更新父行:外键约束失败 我怎么放下这张桌子?