英文:
Null values not allowed in column - legacy database
问题
我有一个无法更改的传统DB2数据库。它无法保存空值,因此所有空的外键都被设置为零(0)。
在读取时,这没有问题,我只是将未找到的操作设置为忽略,它会将子对象返回给我null。
但是我有另一个问题。当我想保存一个空对象时,它应该将我的表中的外键设置为0,但它不知道如何做,会抛出“不允许空值”的异常。
@OneToOne()
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "robj02", referencedColumnName = "objnr")
private Objekt robj02;
有没有办法定义默认值或类似的东西?有没有人有想帮助我的想法?
英文:
I've got a legacy DB2 database which I can't change. It can't save null-values so all foreign keys which are empty are set to zero (0).
While reading this is no problem, I just set the not found action to ignore and it returns me null instead of the child-object.
But I have a problem the other way around. When I want to save a null-object it should set the foreign key in my table to 0, but it doesn't know how to do that and throws me an "null value not allowed"-exception.
@OneToOne()
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "robj02", referencedColumnName = "objnr")
private Objekt robj02;
Is there a way to define a default value or something similar? Does anyone have an idea to help me?
答案1
得分: 1
你可以通过以下方式纠正你的映射:
@Entity
public class YourEntity
{
@Column(name = "robj02")
private Long objektId;
@OneToOne
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "robj02", referencedColumnName = "objnr", insertable = false, updatable = false)
private Objekt robj02;
// 获取器/设置器
}
然后可以按以下方式进行持久化操作:
YourEntity entity = new YourEntity();
entity.setObjektId(0L);
// ...
entityManager.persist(entity);
英文:
You can correct your mapping in the following way:
@Entity
public class YourEntity
{
@Column(name = "robj02")
private Long objektId;
@OneToOne
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "robj02", referencedColumnName = "objnr", insertable = false, updatable = false)
private Objekt robj02;
// getters/setters
}
and then just persist it in the following way:
YourEntity entity = new YourEntity();
entity.setObjektId(0L);
// ...
entityManager.persist(entity);
答案2
得分: 0
脏代码但类似这样:
void setRobj02(Objeckt robj02) {
this.robj02 = (robj02 != null)
? robj02
: Objekt.ZERO // 你应该先创建它
}
英文:
Dirty hack but something like
void setRobj02(Objeckt robj02) {
this.robj02 = (robj02 != null)
? robj02
: Objekt.ZERO // you should create it first
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论