无法在@ManyToOne关系上插入空值

时间:2018-05-28 12:03:12

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

当我尝试保留A class Object时,我收到此错误:

Detail: Key (classB)=() is not present in table "b".

我需要有可能在引用的列上插入null对象。

问题是hibernate将null值转换为空字符串,所以当我尝试持久化该对象时,它会失败。

如果我将cascade = CascadeType.ALL放在@ManyToOne上,但它会在B table上创建一行ID为0且空字符串为refColName值。我想避免这种情况,因为de A class是孩子,而级联应该是B类。

@Entity
@Table
public class A {
    ...
    @ManyToOne
    @JoinColumn(name = "class_b", referencedColumnName = "refColName", nullable = true)
    private B classB;
    ...
}

@Entity
@Table
public class B {
    ...

    @Id
    @Column (name = "id")
    private long id;

    @Column(name = "refColName")
    private String refColName;
    ...
}

有什么建议吗? 谢谢你的时间

编辑:

这是单向关系,其中B是主数据表,所以我有预定义的值。 refColName应该是一个String。我使用referencedColumnName因为我不能将id作为外键。

1 个答案:

答案 0 :(得分:0)

  

我需要有可能在null上插入null对象   参考专栏。

请确保要保留的classA输入应如下所示(在json中表示)

{
  classB:null
}

而不是

{
  classB:{
    refColName:null
  }
}