Java Can';t在@ManyToOne关系上插入空值
当我试图持久化一个Java Can';t在@ManyToOne关系上插入空值,java,spring,hibernate,jpa,many-to-one,Java,Spring,Hibernate,Jpa,Many To One,当我试图持久化一个类对象时,我遇到了这个错误: Detail: Key (classB)=() is not present in table "b". 我需要有可能在引用的列上插入null的对象 问题是hibernate转换空字符串上的空值,所以当我尝试持久化对象时,它失败了 如果我将cascade=CascadeType.ALL放在@ManyToOne上,它会在B table上创建一行,ID=0,空字符串为refColName值。我想避免这种情况,因为dea类是子类,而级联应该在B类中 @
类对象时,我遇到了这个错误:
Detail: Key (classB)=() is not present in table "b".
我需要有可能在引用的列上插入null的对象
问题是hibernate转换空字符串上的空值,所以当我尝试持久化对象时,它失败了
如果我将cascade=CascadeType.ALL
放在@ManyToOne
上,它会在B table
上创建一行,ID=0,空字符串为refColName
值。我想避免这种情况,因为dea类是子类,而级联应该在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应该是一个字符串。我使用referencedColumnName是因为我不能将id作为外键
我需要能够在
引用列
请确保要持久化的classA输入如下(用json表示)
而不是
{
classB:{
refColName:null
}
}
引用的`列不是字符串。它必须是对象AIt的一个单向关系的集合/列表,其中B是主数据表,所以我有预定义的值。refColName应该是一个字符串。我使用referencedColumnName,因为我不能将id作为外键。尝试使用@ManyToOne选项不起作用。我仍然得到同样的错误。我尝试了一些我看到的答案,但没有任何效果。“a类是子类,级联应该在B类中”-那么为什么不使用一个单向的@OneToMany
关联和一个连接列呢?另外,您是否有机会使用Oracle?
{
classB:{
refColName:null
}
}