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

Spring Data JPA,Hibernate:通过从另一个表中选择来更新所有查询和SET值

云德辉
2023-03-14

以下SQL在JPA查询中可能吗?我试过了,但实际SQLHibernate运行似乎不正确。

这是我想写为JPA查询的SQL;

UPDATE movie m SET average_rating = COALESCE((SELECT AVG(stars) FROM rating r WHERE r.movie_id = m.id), 0);

这是JPA查询;

@Query("UPDATE Movie m SET m.averageRating = COALESCE((SELECT AVG(r.stars) FROM Rating r WHERE r.movie = m), 0)")

hibernate说了什么;

Hibernate:
    insert
    into
        HT_Movie
        select
            movie0_.id as id
        from
            Movie movie0_
Hibernate:
    update
        Movie
    set
        average_rating=coalesce((select
            avg(rating1_.stars)
        from
            Rating rating1_
        where
            rating1_.movie_id=id),
        0)
    where
        (
            id
        ) IN (
            select
                id
            from
                HT_Movie
        )

所以似乎有一个额外的地方被Hibernate添加。

共有1个答案

邴英毅
2023-03-14
@Query("UPDATE Movie m SET m.averageRating = COALESCE((SELECT AVG(r.stars) FROM Rating r WHERE r.movie = m), 0)")

这是完全正确的。hibernate也能正常工作。Hibernate的工作方式如下:

  1. 创建一个临时表HT\U Movie并插入Movie表的ID
  2. 将JPA查询作为一个整体创建,其中
  3. 比较HT\U电影中的抽象ID,提高更新处理速度

这并不是新的hibernate总是捏造查询。

 类似资料:
  • 我有三张桌子,像第一张,第二张,第三张。 我需要一个mysql解决方案。 从table1、table2中选择table1.val1、table2.val1,并更新返回的值,如下所示。 更新table3设置value=table1.val1,其中value=table2.val1 我的查询不工作.. “WHERE子句”中的列“C1.COM_ID”未知

  • 问题内容: 如何使用JOIN从一个表中选择所有列,从另一个表中仅选择一些列?在MySQL中。 问题答案: 只需使用表名: 这将选择所有列和列和从。

  • 问题内容: 我有两个数据库,我想用另一个数据库表中的值更新一个表。我正在使用以下查询,但它不起作用。 我也尝试了以下查询,但它也不起作用: 问题答案: 更新1 根据您的评论,应成为联接的一部分。这是正确的: 您甚至可以添加来简化语句,

  • 我刚开始冬眠。我有两张桌子,有一对多的关系。有两个表格: 这是一个父类,它与图像表有一对多关系 现在我想使用父类的id(即:pashminaId)从类中选择一个 如: 选择IMAGE_NAMETBL_IMAGEPASHMINA_ID='some_digit'; 我怎么能在图像类中传递pashminaId,因为没有它只有一个父类的对象创建。 那么,我如何在Hibernate中实现这一点? 谢谢!希望

  • 问题内容: 我发现了具有正确答案的类似问题。但是它们对我来说有点复杂。我只想要一个简单的基本声明。 我有: …和: 如何合并它们? 问题答案: 有关OUTPUT子句的更多信息,请查看此文章。

  • 我有两张调查表。表1包含以下字段发送的调查:SID、SalesRep、位置。表2包含用以下字段返回的调查结果:RID、SID、QID、AID。 在表1中,SID是唯一的,没有重复项。在表2中,RID是唯一的,并且表示被回答的每个问题和答案。表2中的SID代表了回答问题的调查。因此,如果调查中回答了10个问题,表2中将有10行具有相同的SID。 我需要做的是找出每个销售人员已经发送了多少份调查,采取