2017-10-11 77 views
0

我非常天真地使用Hibernate。我有一个表,其中所有字段不为空和默认。字符串字段默认使用空格(“”),而int字段默认为1或0。此外还有1个时间戳字段,其默认日期为。如何在使用Hibernate更新时将DB字段值重置为默认值?

趁现在消费者可以进入使用我休息服务的任何值,如果他在场上向什么话,我想设置数据库字段值重置为默认值。在调用更新之前,我不想在Java端做相同的默认值。我想要只在数据库端定义默认值。

我曾尝试动态插入=“真”,这有助于我在创建操作,如果消费者不提供任何后来我把空在其中不包含在最终的查询在Java端领域。

但这种方法不更新过程中帮助我,因为有些领域有变化的,有些是根本算不了什么由消费者发送。所以我也尝试dynamic-update =“true”以及dynamic-insert =“true”。如果数据库字段的值和消费者没有为该字段发送任何信息,那么它被认为是变化,并且它构成休眠准备的最终查询。因此它无法满足我的目的。

我怎样才能得到这些字段重置为默认值,其DB对这些领域,而消费无关(空或空)发送?

我正在使用DB2和Hibernate。在实体感谢

+0

您可以在不使用Java代码的情况下实现此目的。如果你使用的是MySQL,你可以将默认值设置为你想要的值。我还没有尝试过其他数据库,但我相信Oracle和SQL服务器也有这个选项。 https://www.safaribooksonline.com/library/view/mysql-cookbook/0596001452/ch08s05.html – kevenlolo

回答

1

默认值应与默认值一样在你的数据库中,如果两个不同步,你只想在你的数据库,你需要保持许多不必要的错误有默认值。

而当你试图拦截插入操作来删除空值列,你的实体状态和DB状态将是不匹配的,这意味着你需要查询回数据库,如果要处理这个实体。 还有一个问题,当你真的需要插入空值时,它也会改变为默认值吗?

@Column(name = "NAME") 
private String name=" "; 
@Column(name = "QUANTITY") 
private BigDecimal quantity = BigDecimal.ZERO; 
0

您可以在实体领域的默认值:

所以,如果你指定这样在实体的默认值是更好的。如果值未更改,则分配的默认值将保存在数据库中。

@Column(name = "NAME") 
private String name=" "; 
@Column(name = "QUANTITY") 
private Long quantity = OL; 
@Column(name = "DATE") 
private LocalTime date = LocalTime.now(); 
+0

这是值更改的情况下更新。但是,当值更改为null,那么我想更新db值与默认值 –

+0

为什么不使用db的对象设置新值到对象和保存使用休眠saveOrUpdate()方法。 –

相关问题