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

JPA使用OneToMany加入自定义查询

弘和同
2023-03-14

我想使用@Query批注从具有@OneTo许多关系的实体创建左连接查询。

母公司是:

    @Entity
    @Table(name="Registration")
    public class Registration {

       @Column(nullable = false)
       @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDate")
       private LocalDate effect;

       @OneToMany(targetEntity=Payment.class, cascade=CascadeType.ALL,fetch = FetchType.LAZY)
       @JoinColumn(name="uuid")
       private List<Payment> payment;
   }

孩子:

    @Entity
    @Table(name="Payment")
    public class Payment {

       @Id
       @GeneratedValue(generator = "uuid")
       @GenericGenerator(name="uuid", strategy = "uuid2")
       @Column(columnDefinition = "BINARY(16)")
       private UUID uuid;
}

对于DAO,我确实喜欢以下内容:

@Query("SELECT p FROM Registration r JOIN r.payment p WHERE r.effect = :effect")
Iterable<Payment> find(@Param("effect") LocalDate effect);

显然,它是错误的,因为生成的查询是:

选择payment1。uuid为uuid1_9_,付款1_。注册时内部加入付款1的注册金额。uuid=payment1_uid。uuid在哪里注册。效果=?

在生成关系表时:

对我来说,正确的查询应该是这样的:

选择p.*从注册r加入registration_paymentrp onrp.registration=r.uuid加入支付p onp.uuid=rp.payment其中r.effect='2015-10-16'

请问什么是好的查询语法?实际查询返回空数组

共有1个答案

戈安翔
2023-03-14

最后,我找到了一个解决方案,你必须用@JoinTable描述关系表:

@JoinTable(
        name="registration_payment",
        joinColumns = @JoinColumn(name="registration"),
        inverseJoinColumns = @JoinColumn(name = "payment")
)
private List<Payment> payment;

不需要修改@Query:

@query("SELECT p from注册r JOINr.paymentp WHEREr.effect=:效果")

生成的查询是:

选择payment2_uuid作为uuid1_9_,payment2_金额作为amount2_9_注册registrati0_内连接registration_paymentpayment1_registrati0_uuid=payment1_注册内连接支付payment2_payment1_支付payment2_uuid其中registrati0_效果=?

 类似资料:
  • 我在这里创建了一个类似于教程的Web应用程序:https://spring.io/guides/tutorials/react-and-spring-data-rest/ . 我已经添加了后gresql数据库,一切正常。我有一个基本查询查找我的存储库中的By用户名(字符串名称),工作正常。我的问题是,由于某种原因我无法创建自定义查询,例如 . 假设我做了一个测试,我只想得到这个语句的值。我说的不能

  • 问题内容: 我正在使用Spring Data JPA进行项目。我在数据库中有一个表作为my_query。 我想创建一个将字符串作为参数的方法,然后将其作为数据库中的查询执行。 方法: 例如,当我通过 那么它应该在数据库级别运行该查询。 存储库类如下。 但是,它没有按我预期的那样工作。它给出以下错误。 还有什么其他方法可以实现这个目标。提前致谢 问题答案: 您可以参数化的唯一部分是在子句中使用的值。

  • 我是Spring Data投影的新手,我正在尝试在一个新项目中使用此功能。 特别是,我想在与复杂查询关联的回购方法上使用投影。 我用注释注释了我的方法,并声明了一个JPA查询,其中包含几个连接的表/实体和一个复杂的where条件。 在本文中,我了解到可以使用基于接口的投影和基于类的投影,但只有第一个支持嵌套投影。 我需要嵌套投影,但似乎只有使用基于接口的投影才支持此功能,并且这种方法仅适用于自动生

  • 我正在用Spring Data JPA做一个项目。我在数据库中有一个表为my_query。 我想创建一个以字符串作为参数的方法,然后将其作为数据库中的查询执行。

  • 我有一个整数参数。我需要编写一个定制的Spring JPA查询,其中等效的SQL是<(1,2)中的code>和x.propertyStatuid。 我在SpringDataJPA文档中看到关键字是“in”,如