当前位置: 首页 > 知识库问答 >
问题:

Spring JPA存储库为update子句生成错误的本机查询

周龙光
2023-03-14

我正在尝试使用以下方法更新我的实体列:

@Modifying
@Query("update Person person set person.hixNumber = :hixNumber , "
        + "fixNumber.fixNumber = :fixNumber where person.role.type = 'ADMIN'")
int updatePersonByRole(@Param("hixNumber ") int hixNumber , @Param("fixNumber ") int fixNumber);
@Getter
@Setter
@Entity
@NoArgsConstructor
public class Person {

    @EmbeddedId
    private PersonId personId;

    @MapsId("roleId")
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "role_id", insertable = false, updatable = false)
    private Role role;

    @MapsId("storeId")
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "store_id", insertable = false, updatable = false)
    private Store store;

    private int hixNumber;

    private int fixNumber;
}

和主键实体:

@Getter
@Setter
@EqualsAndHashCode
@Embeddable
public class Personid implements Serializable {

    private Long roleId;

    private Long storeId;
}

我做错了什么?谢谢你。

共有1个答案

欧阳杰
2023-03-14

我认为问题在于您正在间接尝试引用一个依赖实体role。这需要在update语句中使用join,而且它在本机查询中转换得不好。

尝试使用子查询,这样可以更好地转换为本机查询:

update Person person 
set person.hixNumber = :hixNumber,
    person.fixNumber = :fixNumber 
where exists (
      select personSub.id 
      from Person personSub
        inner join personSub.role r 
      where person.id = personSub.id 
          and r.type = 'ADMIN'"
    )
 类似资料:
  • 问题内容: 将SELECT查询放在UPDATE查询的WHERE子句中时出现错误。 我的查询是这样的: AND错误将显示如下: “无法在FROM子句中指定目标表’m’进行更新” 问题答案: 实际上,您可以通过将其包装在子查询中来更新它(从而为结果创建临时表) 或使用 JOIN

  • 我对SpringData和JPA有问题。当我向HomeRepository接口添加方法时,我得到一个错误。我使用的是JPararePository接口,在pom.xml文件中有一个MySQL数据库集。这些只是我对spring的开始,所以我需要一些了解spring的人的帮助。下面是我的代码和日志: 主页库: 用户存储库: 日志:

  • ..回购方法 我用DESC和ASC调用编写了一个单元测试,反之亦然,似乎第一个调用是什么,第二个调用给出的结果是一样的。

  • 我无法安装postgresql 9.5这是我在docker文件Dockerfile行的时候 它运行下面的命令。 当我在ubuntu xenial上时,它似乎试图从debian存储库中获取更新。可能是因为我首先为debian安装了错误的docker版本,然后用删除了debian docker 在此之后,我已经为我的ubuntu xenial发行版安装了docker。我不明白为什么当我运行docker

  • 我只是不得不从一些我没有联系的开发人员那里接管一个Flutter项目... Flutter医生都检查过了...错误都在pub-cache中。我尝试了flutter清理,flutter pub get...这是错误的开始... “注意: C: \Users\justi\AppData\Local\Pub\Cache\hosted\Pub.dartlang.org\agora\u rtc\u engi

  • 问题内容: 我试图在Postgres 9.1.3中使用此查询: 我收到此错误: 我真的很困惑 根据Postgres文档,WITH子句显示正确。如果我在WITH子句中单独运行查询,则会得到正确的结果。 问题答案: 从精美的手册中: 有两种方法可以使用数据库中其他表中包含的信息来修改表:使用子选择,或在子句中指定其他表。 因此,您只需要一个FROM子句: 错误消息甚至说了很多: 错误:缺少表“ sto