jpa ссылается на внешнюю таблицу вместо внешнего столбца в JoinColumn - PullRequest
0 голосов
/ 05 ноября 2018

Приложение и История с OneToMany:

@Entity
@Table(name = "app")
@SuppressWarnings("serial")
public class App implements Serializable {
    @Id     @Column(name = "app_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long appId;
    private String name;
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "app", cascade = CascadeType.PERSIST)
    private Set<History> history = new HashSet<>();
    //get.set
}

@Entity
@Table(name = "app_history")
@SuppressWarnings("serial")
public class History implements Serializable {
    @Id
    @Column(name = "history_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long historyId;
    @JoinColumn(name = "appId")
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
    private App app;
    //get.set
}

Просмотр в журнале:

create table app (app_id int8 not null, name varchar(255), primary key (app_id))

create table app_history (history_id int8 not null, app_id int8, primary key (history_id))

alter table app_history add constraint FKeuk3km6r7oklj5xc1ecwvxmkm foreign key (app_id) 
references app

Ожидается, что приведенная выше строка будет

alter table app_history add constraint FKeuk3km6r7oklj5xc1ecwvxmkm foreign key (app_id) 
references app (app_id)

Итак, почему (app_id) отсутствует, когда jpa пытается создать таблицу?

Примечания: Я нахожусь

  • mysql v8.0.12
  • mysql-connector-java v8.0.13
  • spring-boot v2.1.0.RELEASE
  • Полный код здесь :
  • Журналы здесь

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вот проблема: вы используете базу данных MySQL, но JPA использует диалект для PostgreSQL:

spring: 
  main: 
    banner-mode: "off"
  datasource: 
    url: jdbc:mysql://localhost:3306/cifi3?useSSL=false&allowPublicKeyRetrieval=true
    username: tester
    password: tester
  jpa: 
    database-platform: org.hibernate.dialect.PostgreSQLDialect
    show_sql: true
    hibernate:
      ddl-auto: create-drop
      format_sql: true
  data:
    rest:
      basePath: /repo

Я предлагаю вам изменить database-platform: org.hibernate.dialect.PostgreSQLDialect в database-platform: org.hibernate.dialect.MySQLDialect

0 голосов
/ 05 ноября 2018

Измени свой

@JoinColumn(name = "appId")

до

@JoinColumn(name = "app_id")

Это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...