【问题标题】:Hibernate doesn't create join tableHibernate 不创建连接表
【发布时间】:2019-03-25 10:09:35
【问题描述】:

我遇到了一个以前从未发生过的问题。我有ManyToMany 关系并且Hibernate 不创建连接表。它只创建实体表。我正在将 SpringDataJpa 与 MySQL 一起使用。

医生实体:

Entity
@Table(name = "doctors")
public class Doctor {
  @Id
  @Size(min = 11, max = 11)
  @NotNull
  private String pesel;

  @NotNull
  private String firstName;

  @NotNull
  private String lastName;

  private Long salary;

  @NotNull
  private String speciality;

  @OneToOne
  private Doctor supervisor;

  @ManyToMany
  @JoinTable(name = "doctors_treatments",
          joinColumns = @JoinColumn(name = "pesel", referencedColumnName = "pesel"),
          inverseJoinColumns = @JoinColumn(name = "treatment_id", referencedColumnName = "id"))
  private Set<Treatment> treatments;
}

治疗实体:

@Table(name = "treatments")
public class Treatment {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  @NotNull
  private String name;

  private Long cost;

  @ManyToMany(mappedBy = "treatments")
  private Set<Doctor> doctors; 
}

application.properties:

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:33061/sys

堆栈跟踪:

  org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
    ...
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'sys.doctors_treatments' doesn't exist

任何想法可能是什么原因?

【问题讨论】:

  • 它清楚地表明表doctors_treatments 不存在。你确定它存在吗?
  • 不,它没有。我希望它由 Hibernate 创建(如医生和治疗表)
  • 您需要先创建实体。至少,我一直都是这样做的。
  • 连接表的实体?
  • 是的,它仍然是一张桌子。

标签: mysql spring hibernate spring-data-jpa


【解决方案1】:

事实证明,由于 Doctors 主键扩展了允许的大小,Hibernate 没有创建连接表。但是,它能够单独创建 Doctors 表。所以为了修复它,我不得不限制 id 大小。我已经像这样更改了 Doctors id:

@Id
@Column(length = 11)
@NotNull
private String pesel;

现在可以通过 Hibernate 创建连接表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2017-10-24
    相关资源
    最近更新 更多