java - spring data jpa中如何从子主键获取父实体?

标签 java spring-boot spring-data-jpa

您好,我有父实体用户,它与车辆实体具有一对多关系,并且车辆实体与用户具有多对一关系。我的车辆表中有一个外键“user_fk”。我有一个 UserRepository,它扩展了 Spring Data JPARepository,它具有 save 和 findById 方法。

此外,我在车辆表中有两个属性,它们唯一标识车辆,我需要使用该数据来查找相应的用户对象。我知道这可以通过创建一个扩展 JPA 存储库并可以使用的车辆存储库来简单地完成find by 方法,但我不想创建一个新的车辆存储库类只是为了实现此功能。如何在不创建车辆存储库的情况下找到 User_fk 列值或用户对象?我可以使用 UserRepository 实现此目的吗?

我的用户类别:

    @Entity
    @Table(name = "usr")
    class User{
    @Id
    @Column(name = "user_id", updatable = false, nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long userId;
    private String username;
    @OneToMany(mappedBy = "user",cascade = CascadeType.ALL)
    private List<Vehicle> vehicles= new ArrayList<>();
    //getters and setters
    }

我的车辆类别:

       @Entity
       @Table(name = "vehicle")
       class Vehicle{
       @Id
       @Column(name = "vehicle_id", updatable = false, nullable = false)
       @GeneratedValue(strategy = GenerationType.IDENTITY)
       private Long vehicleId;
       private String vehicleName;
       @ManyToOne(fetch = FetchType.LAZY)
       @JoinColumn(name = "user_fk" , nullable = false)
       private User user;
      //getters and setters 
      }

我有vehicleId和vehicleName的值,我想从这两个属性值获取User对象。

我不想创建一个车辆存储库只是为了查找 User 对象。我知道它可以通过创建一个扩展 springdatajpa 中的 JPA 存储库的车辆存储库来实现。

最佳答案

您可以像这样从用户存储库中执行此操作

User findByVehicles_VehicleIdAndVehicles_VehicleName(Long id, String name);

请注意,如果有多个用户满足条件,这将引发异常

如果您只想获取 id,则必须依赖自定义查询

@Query("select u.userId from User u join u.vehicles v where v.vehicleId=?1 and v.vehicleName=?2")
Long getUserIdByVehicleIdAndName(Long id, Long name);

关于java - spring data jpa中如何从子主键获取父实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59986634/

相关文章:

java - 如何配置 Tomcat JULI 日志记录来滚动日志文件?

java - Firebase 数据到 Spinner

java - 在反向代理后面嵌入 Tomcat 的 Spring Boot 应用程序在请求/contextPath 时不重定向到 https 而没有尾部斜线

Spring Data JPA .save() 方法未保存在数据库中

带有 JPA : move @Entity to different package 的 Spring Boot

java - jMonkeyEngine:flyCam 和 inputManager 都返回 NULL

Java JPA 查询 - 抽象模式类型未知

java - spring cache redis : LazyInitializationException failed to lazily initialize a collection, 无法初始化代理 - 无 session

java - Spring 启动 : Mocking SOAP Web Service

java - Spring JPA - "java.lang.IllegalArgumentException: Projection type must be an interface!"(使用 native 查询)