首页 > 解决方案 > 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”有关,因为我怀疑作为主键之一的生日值以某种方式变为空,但不知道为什么 - 请协助

标签: springhibernatejpaspring-data-jpaone-to-many

解决方案


拥有cascade = CascadeType.ALL足以将保存操作从父实体级联到子实体。

SQLSyntaxErrorException意味着您尝试在 DATE 列中保存类型错误的内容。查看您的实体,我建议birthDate 属性很可能是问题所在。正如@Simon Martinelli 在他的评论中所建议的那样,我将从初学者columnDefinition = "DATE"的注释中删除。@Column

通常,如果您已正确设置数据库,则 Spring 和 Hibernate 可以毫无问题地转换日期。如果我上面建议的小修复没有帮助,我们将需要更多信息,尤其是有关您的数据库和子实体表的信息。


推荐阅读