【问题标题】:update attribute for property element in hibernate更新休眠中属性元素的属性
【发布时间】:2013-10-26 19:34:42
【问题描述】:

Hibernate 的属性元素具有更新、插入属性,并且根据文档说明 - 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”,请帮助我了解它的行为方式。这里的派生属性是什么?

【问题讨论】:

    标签: java hibernate


    【解决方案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 表达式)。您可以查看this 帖子中的示例和链接以获取有关派生属性的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2023-04-09
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 2019-12-02
      • 2016-10-10
      相关资源
      最近更新 更多