java.sql.SQLException: поле foreign_key не имеет значения по умолчанию - PullRequest
0 голосов
/ 04 сентября 2018

У меня следующая структура модели:

@Entity
@Table(name = "MY_TEMPLATE")
public class MyTemplate {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", nullable = false, updatable = false)
    private Long id;
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "MY_TEMPLATE_ID")
    private List<MyObject> myobjects = new ArrayList<>();
    ...
}

@Entity
@Table(name = "MY_OBJECT")
public class MyObject implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", nullable = false, updatable = false)
    private Long id;
}

MyDailyResource не имеет ссылки на MyTemplate

у меня тоже обычный CrudRepository:

public interface MyTemplateRepository extends CrudRepository<MyTemplate, Long> {
}

Когда я выполняю:

myTemplateRepo.save(myTemplate) // myTemplate имеет один элемент в коллекции myObjects

Я вижу следующую ошибку:

    insert 
    into
        MY_TEMPLATE
        (LAST_MODIFIED, LAST_MODIFIED_BY, NAME) 
    values
        (?, ?, ?)


    insert 
    into
        MY_OBJECT
        (BAR, FOO) 
    values
        (?, ?)

java.sql.SQLException: Field 'MY_TEMPLATE_ID' doesn't have a default value
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)

Понятия не имею, что я делаю не так и как это исправить.

Не могли бы вы мне что-нибудь порекомендовать?

приписка

Похоже, это потому, что у меня нет нулевого ограничения для этого внешнего ключа в базе данных. Но я не люблю снимать это ограничение

1 Ответ

0 голосов
/ 04 сентября 2018

Надеюсь, что ваша родительская таблица - MY_TEMPLATE, а дочерняя таблица - MY_OBJECT

обновление ваших классов

@Entity
@Table(name = "MY_TEMPLATE")
public class MyTemplate {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", nullable = false, updatable = false)
    private Long id;
    @OneToMany(mappedBy="myTemplate", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<MyObject> myObjects = new ArrayList<>();
    ...
}

@Entity
@Table(name = "MY_OBJECT")
public class MyObject implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", nullable = false, updatable = false)
    private Long id;
    @ManyToOne
    @JoinColumn(name = "MY_TEMPLATE_ID")
    private MyTemplate myTemplate;
}
...