簡體   English   中英

java.sql.SQLException:字段foreign_key沒有默認值

[英]java.sql.SQLException: Field foreign_key doesn't have a default value

我有以下模型結構:

@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)

我不知道我該怎么辦以及如何解決。

能否請你推薦我一些東西?

聚苯乙烯

看起來是因為我對數據庫中的外鍵沒有null約束。 但我不喜歡消除這種約束

希望您的父表是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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM