2

Hibernate 的属性元素具有属性更新、插入和根据文档说明 - http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping-declaration-财产

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

如果将其值设置为“假”而不是“真”,请帮助我理解它的行为。这里的派生属性是什么?

4

1 回答 1

1

您可以在示例中看到差异 - 如果您创建一个实体并使用默认insert设置将其持久化,则该实体已设置的所有字段都将被持久化,您将在 Hibernate 日志中看到预期生成的插入 SQL 语句。就像是:

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

但是如果将insert某个属性设置为false,即使该字段在实体中有值,生成的SQL也会排除相应的列,因此它的值不会被持久化。如果firstNameinsert设置为 false,则生成的 SQL 为:

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

如果firstName可以为空,这将起作用,否则会失败。


所描述的原则也适用于update


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

于 2013-10-26T21:00:51.713 回答