首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Spring Projections更新@Entity?

如何使用Spring Projections更新@Entity?
EN

Stack Overflow用户
提问于 2021-10-13 07:01:33
回答 2查看 95关注 0票数 1

我可以使用Spring projections来修改和持久化已有实体的内容吗?我的目标是只更新一个特定的字段。数据库中该行的任何其他字段都应保持不变。这可以通过投影来实现吗?

或者投影总是只读的?

代码语言:javascript
复制
public void update() {
    PersonProjection p = repository.findByLastname("Doe");
    p.setLastname("test");
    repository.save(p); //how can I save only that field?
}

@Entity
public class Person {
   @Id private long id;
   private String firstname, lastname, age;
}

interface PersonProjection {
   String getLastname();
   void setLastname(String lastname);
}

interface PersonRepository extends CrudRepository<Person, Long> {
     PersonProjection findByLastname(String lastname);
}

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections

EN

回答 2

Stack Overflow用户

发布于 2021-10-13 08:36:13

简而言之,不能,您不能使用Spring数据投影进行更新。

如果您不想事先获取实体,您可以做的是编写自定义查询来更新某些字段。

您也可以使用JPQL或Native查询进行更新。

票数 1
EN

Stack Overflow用户

发布于 2021-10-13 09:22:32

我引用以下资料来回答你的问题:

来自this

SQL SELECT对应于关系代数中的“投影”

this

关系代数

是由E.F.Codd于1972年提出的。它由一组关系上的操作组成:

项目(π):从关系中提取指定的属性(列)。设R是一个包含属性X的关系,πX(R) = { t (X) |t∈R},其中t(X)表示元组t的属性X的值。

因此,projection只是如其名称所建议的那样是只读的。

要只更新一个字段,请以正常和正确的JPA方式进行,即首先获取实体实例,然后更新其状态,然后让JPA自己找出如何更新它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69551025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档