【问题标题】:Spring Data Jpa OneToMany - Exception thrown while trying to save parent and child at same timeSpring Data Jpa OneToMany - 尝试同时保存父母和孩子时抛出异常
【发布时间】:2023-03-14 23:25:01
【问题描述】:

我有一个父表和一个子表,其中父表和子表之间存在一对多的关系 - 在尝试保存也应该保存子数据的父数据时,我遇到了一个异常 - 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:不一致的数据类型:预期DATE 得到 BINARY。 这与“birthDate”字段有关,因为我怀疑作为主键之一的生日值以某种方式变为 null 但不知道为什么 - 请协助

【问题讨论】:

  • Remvoe @Column(name = "ID") 以及出生日期的列定义

标签: spring hibernate jpa spring-data-jpa one-to-many


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-10-16
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 2018-08-02
    相关资源
    最近更新 更多