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”,请帮助我了解其行为方式。这里派生的属性是什么?
答案 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发布的示例和链接,以获取有关派生属性的更多信息。