我在使用Hibernate方面非常天真。我有一个表,其中所有字段都不为null和默认值。字符串字段具有空格("")作为默认值,而int字段默认为1或0。此外,还有1个时间戳字段,默认为日期。
现在,虽然消费者可以使用我的休息服务输入任何值,如果他没有在该字段中发送任何内容,那么我想将DB字段值设置为重置为默认值。在调用update之前,我不想在Java端执行硬编码相同的默认值。我希望只在DB端定义默认值。
我尝试过dynamic-insert =" true"如果消费者没有提供任何东西,那么在创建操作期间帮助我,然后我在Java端的字段中放置null,这不包括在最终查询中。
但是这种方法在更新期间对我没有帮助,因为有些字段有变化而有些字段根本没有被消费者发送。所以我也尝试了dynamic-update =" true"以及dynamic-insert =" true"。如果db字段带有值,而消费者没有为该字段发送任何内容,那么它将被视为更改,它将构成hibernate准备的最终查询。因此它不能满足我的目的。
如何在消费者没有发送任何内容(空或空)的情况下,将这些字段重置为DB为这些字段设置的默认值?
我正在使用DB2和Hibernate。谢谢
答案 0 :(得分:1)
实体中的默认值应与数据库中的默认值相同,如果这两个不同步,并且您希望仅在数据库上具有默认值,则需要保留许多不需要的错误。
当您尝试拦截插入操作以删除空值列时,您的实体状态和db状态将不匹配,这意味着如果要处理此实体,则需要查询回DB。 当你真的需要插入空值时也会出现问题,是否也会更改为默认值?
因此,最好在实体中指定默认值,如下所示:
@Column(name = "NAME")
private String name=" ";
@Column(name = "QUANTITY")
private BigDecimal quantity = BigDecimal.ZERO;
答案 1 :(得分:0)
您可以在实体中设置字段的默认值。如果未更改值,则分配的默认值将保存在DB中。
@Column(name = "NAME")
private String name=" ";
@Column(name = "QUANTITY")
private Long quantity = OL;
@Column(name = "DATE")
private LocalTime date = LocalTime.now();