gpt4 book ai didi

spring-boot - 使用CrudRepository中的外键进行Spring Boot

转载 作者:行者123 更新时间:2023-12-03 13:51:45 28 4
gpt4 key购买 nike

我有3个实体

  • CarWash(设置Wash)
  • Wash(car_wash_id FK到CarWash)
  • WashComment(wash_id FK到Wash)

  • 有什么办法可以写这个查询
       @Query(value="select * from wash_comment where wash_comment.wash_id=(select wash_id from wash where wash.car_wash_id=2", nativeQuery=true))
    List<WashComment> findAllByCarWashId(CarWash carWash)

    不使用nativeQuery?

    最佳答案

    处理JPA的建议:远离表,列和所有RDBMS对象,并着重于实体,它们的属性和关系。

    如果我正确理解了您的问题,则可以让Spring Boot通过使用以下命令自动解决该问题:

    List<WashComment> findByWash_CarWash_Id($Parameter(name="id") int id) 

    方法签名- _具有 .和它们的属性之间的含义,一个遍历点-用于指定基于 wash.carWash.id的查找。因此,这将转换为以下内容:
    select * 
    from WashComment wc
    where wc.wash.carWash.id=:id

    (将其放入 @Query注释当然是完全有效的)

    假设您的WashComment和Wash对象如下所示:
    public class WashComment {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    @OneToMany
    private Wash wash;

    //... left out for brevity
    }

    public class Wash {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    @OneToMany
    private CarWash carWash;

    //... left out for brevity
    }

    并将 @Id类的 Wash字段命名为 id

    有关这种表达的更多信息,请参见: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-property-expressions

    建议2 :如果需要使用内部选择,请尝试使用 JOIN重写它。在100的99倍中,这将是可能的,并且可读性更高,并且通常具有更高的性能:
    select wc.* 
    from wash_comment wc
    join wash w on wc.wash_id=w.wash_id
    where wash.car_wash_id=2

    (免责声明:我现在无法尝试任何此操作,附近没有JRE可以玩...)

    关于spring-boot - 使用CrudRepository中的外键进行Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44566760/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com