java - java.sql.SQLException:字段 foreign_key 没有默认值
问题描述
我有以下模型结构:
@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)
我不知道我做错了什么以及如何解决它。
请你给我推荐点东西好吗?
附言
看起来是因为我对数据库中的外键没有空约束。但我不喜欢删除那个约束
解决方案
希望您的父表是 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;
}
推荐阅读
- php - 如果主图像不可用,则获取另一个图像
- angular - 如何在按钮获得焦点时禁用键
- c - 使用动态库获取结构中成员的地址
- mongodb - 获取在 MongoDB 中创建文档的月份名称
- vue.js - 使用 Promise 在执行另一项任务之前完成一项任务
- java - 如果 Java 应用程序在关闭时被隐藏,当您单击以重新打开它时会发生什么?
- python - jsonschema 通过具有不同名称或类型的键进行验证
- r - For 循环配对到 t 测试返回矩阵错误
- firebase - 从 Firestore 返回时间戳类型并与 Flutter 中的 DateTime.now() 进行比较
- android - 我可以在 android studio 中使用多少个活动?