Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新hibernate中属性元素的属性_Java_Hibernate - Fatal编程技术网

Java 更新hibernate中属性元素的属性

Java 更新hibernate中属性元素的属性,java,hibernate,Java,Hibernate,Hibernate的property元素具有属性update、insert,并且根据文档说明- 更新、插入(可选-默认为true):指定 映射列应包含在SQL更新和/或插入中 声明。将两者都设置为false将允许纯“派生”属性 其值是从映射到 相同列,或由触发器或其他应用程序执行 请帮助我理解如果将其值设置为“false”而不是“true”,它的行为。这里的派生属性是什么?您可以在示例中看到区别-如果您创建一个实体并使用默认的insert设置将其持久化,则该实体设置的所有字段都将持久化,并且您将

Hibernate的property元素具有属性update、insert,并且根据文档说明-

更新、插入(可选-默认为true):指定 映射列应包含在SQL更新和/或插入中 声明。将两者都设置为false将允许纯“派生”属性 其值是从映射到 相同列,或由触发器或其他应用程序执行


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

您可以在示例中看到区别-如果您创建一个实体并使用默认的
insert
设置将其持久化,则该实体设置的所有字段都将持久化,并且您将在Hibernate日志中看到预期生成的insert 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可为空,则此操作有效,否则将失败


所述原则也适用于
更新


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