更新hibernate中property元素的属性

时间:2013-10-26 19:34:43

标签: java hibernate

Hibernate的属性元素具有属性update,insert和根据文档说明 - http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping-declaration-property

  

update,insert(可选 - 默认为true):指定   映射列应包含在SQL UPDATE和/或INSERT中   声明。将两者都设置为false允许纯粹的“派生”属性   其值是从映射到的其他属性初始化的   相同的列,或通过触发器或其他应用程序。

如果将其值设置为“false”而不是“true”,请帮助我了解其行为方式。这里派生的属性是什么?

1 个答案:

答案 0 :(得分:1)

您可以在示例中看到差异 - 如果您创建实体并使用默认insert设置保留它,则实体设置的所有字段都将保留,您将在Hibernate日志中看到预期生成的插入SQL语句。类似的东西:

Hibernate: insert into SCHEMA1.User (id, firstName, lastName) values (default, ?, ?)

但是如果将某些属性的insert设置为false,即使该字段在实体中具有值,生成的SQL也会排除相应的列,因此不会保留该值。如果 firstName insert设置为false,则生成的SQL为:

Hibernate: insert into SCHEMA1.User (id, lastName) values (default, ?)

如果 firstName 可以为空,这将有效,否则将失败。


所述原则也适用于update


在docs中提到的情况下,将这些属性设置为false是有意义的,在这种情况下,您将处理不存在的派生(计算)属性。它实际上是一个只读属性,其值在获取时计算(计算被声明为转换为SELECT子查询的SQL表达式)。您可以查看this发布的示例和链接,以获取有关派生属性的更多信息。