列中不允许空值 - 旧数据库

Null values not allowed in column - legacy database

我有一个无法更改的遗留 DB2 数据库。它无法保存空值,因此所有为空的外键都设置为零 (0)。

虽然阅读这篇文章没问题,但我只是将未找到的操作设置为忽略,它 returns 我 null 而不是子对象。

但反过来我遇到了问题。当我想保存一个空对象时,它应该将我的 table 中的外键设置为 0,但它不知道该怎么做,并向我抛出“不允许空值”异常。

@OneToOne()
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "robj02", referencedColumnName = "objnr")
private Objekt robj02;

有没有办法定义默认值或类似的东西?有没有人有想法帮助我?

肮脏的 hack 但类似

void setRobj02(Objeckt robj02) {
    this.robj02 = (robj02 != null)
        ? robj02
        : Objekt.ZERO // you should create it first
}

您可以通过以下方式更正您的映射:

@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
}

然后按照以下方式坚持下去:

YourEntity entity = new YourEntity();
entity.setObjektId(0L);
// ...
entityManager.persist(entity);