spring - Spring Data Jpa OneToMany - 尝试同时保存父母和孩子时抛出异常
问题描述
我有一个父表和一个子表,其中父表和子表之间存在一对多的关系-在尝试保存也应该保存子数据的父数据时,我遇到了一个异常-java.sql.SQLSyntaxErrorException:ORA-00932:不一致的数据类型:预期 DATE 得到 BINARY
这是我的代码:
@Entity(name ="Parent")
public class Parent {
@Id
@Generate.....
@Column
private int id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "parent")
private List<Child> children = new ArrayList<Child>();
simple ... getter and setter ...
}
@Entity(name ="Child")
public class Child{
@EmbeddedId
@Column(name = "ID")
private ChildCompositeIds id;
... simple getter an setter
}
@Embeddable
public class ChildCompositeIds implements Serializable {
@Column(name = "child_name")
private String childName;
@Column(name = "birth_date",columnDefinition = "DATE")
private LocalDate birthDate;
public ChildCompositeIds () {
}
public ChildCompositeIds (String childName, LocalDate birthDate) {
this.childName= childName;
this.birthDate= birthDate;
}
simple ... getter and setter ...
}
在保存父数据时,我可以看到“ChildCompositeIds”类中的所有子数据都已正确填充,但我仍然收到此异常 - java.sql.SQLSyntaxErrorException: ORA-00932: compatible datatypes: expected DATE got BINARY。这与字段“birthDate”有关,因为我怀疑作为主键之一的生日值以某种方式变为空,但不知道为什么 - 请协助
解决方案
拥有cascade = CascadeType.ALL
足以将保存操作从父实体级联到子实体。
这SQLSyntaxErrorException
意味着您尝试在 DATE 列中保存类型错误的内容。查看您的实体,我建议birthDate 属性很可能是问题所在。正如@Simon Martinelli 在他的评论中所建议的那样,我将从初学者columnDefinition = "DATE"
的注释中删除。@Column
通常,如果您已正确设置数据库,则 Spring 和 Hibernate 可以毫无问题地转换日期。如果我上面建议的小修复没有帮助,我们将需要更多信息,尤其是有关您的数据库和子实体表的信息。
推荐阅读
- css - 无法在 WordPress 中更改 div class="entry-content" 的字体大小
- javascript - 可以使用交叉点观察器在目标的特定偏移顶部计算/触发吗?
- xpath - 使用自定义字符串的 xpath 多节点查询
- python - 在 HTML 文件中显示数据库中的项目
- plugins - 如何使用telegraf在centos机器中推送进程运行状态?
- ios - 打印 uitextfield 时崩溃
- spring - 导入 org.springframework.boot.test 无法解决
- xcode - Xcode 11 字体问题(react-native)
- vbscript - 运行时无法修改运行时 BPT 框架中的默认 SAPGuiComboBox 值
- mysql - 如何获取格式和后缀已知但确切值未知且数据库中可能有多个值的值?