当前位置: 首页 > 面试题库 >

如何使用Hibernate更新所有实体属性的仅一部分

胡和煦
2023-03-14
问题内容

我收到一个包含30个字段的JSON,而我的实体是根据此JSON构建的。问题是:不应更新两个字段(两个日期)。

如果使用entity.merge,两个字段都会更新。

如何避免更新这两个字段?

也许使用criteria.Example?

没有我写大量的HQL,有什么方法可以做到这一点吗?


问题答案:

本文非常详细地解释了您的问题,但我也将在这里进行总结。

如果您永远不想更新这两个字段,则可以将它们标记为updatable=false

@Column(name="CREATED_ON", updatable=false)
private Date createdOn;

当你将一个实体,修改它,只要当前SessionEntityManager已打开,Hibernate可以跟踪通过改变脏检查机制。然后,在刷新期间,SQL将执行更新。

如果您不喜欢UPDATE语句中包含所有列,则可以使用动态更新:

@Entity
@DynamicUpdate
public class Product {
   //code omitted for brevity
}

然后,仅修改后的列将包含在该UPDATE语句中。



 类似资料:
  • 问题内容: 我有根实体及其单一关联。 当我获取实体时,我需要热切地获取,但是只有它的3个属性:userId,firstName,lastName。 现在,我的条件查询是: 接下来,我得到了sql语句,该语句仅选择投影列表中指定的3个属性。但是它不会选择根实体的任何属性。生成的查询是: 该查询不起作用,因为它返回了五个为空的。五个映射是因为有五行匹配where条件。我创建了简单的sql查询,它工作正

  • 是否有任何方法可以随时更新hibernate加载到程序中的实体的所有引用? 例如,我在A类中加载了id为“1”的产品,并在B类中更改了id为“1”的同一产品的新加载,但A类中的产品没有更改。我该怎么解决这个? 数据在SQL表中更新,而不是在“product”中更新,它是与“productDUP”相同的实体。我该如何解决问题呢?有没有办法在程序中解决,不是每次我们需要的时候都加载数据?

  • 我想我有两个实体具有双向的和关联: ——有很多-- 我想选择实体,其中所有关联的实体都将设置为 例如,如果我有以下数据: 起源: 孩子: 我想要一个HQL或JPQL查询,它返回1的实体。 知道吗?

  • 我有一个PSU实体: null 我收到错误:

  • 我有根实体及其单个关联。 当我获取实体时,我需要急切地获取,但只有的3个属性:userId、afstName、lastName。 现在我的标准查询是: 接下来,我执行,我得到了sql语句,它只选择了投影列表中指定的的3个属性。但它不选择根<code>Hostel</code>实体的任何属性。生成的查询为: 此查询不起作用,因为它返回五个空的。五个映射是因为有五个<code>Hostel</code

  • 问题内容: 我将SpringJPARepository与hibernate一起使用,并且对实体更新有一个问题。我通过传递单个实体来调用jparepository.save(entity),但在跟踪日志中,我也可以看到针对数据库中其他行发出的更新语句。在调用save之前,我有一个findAll并且某些实体的值正在更改。但是我只传递了一个要保存的实体,但是仍然保存了所有更新的实体。您能提供有关此信息吗