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

如何从spring data JPA中的子主键获取父实体?

杭永安
2023-03-14
    @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对象。

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

共有1个答案

邵凯定
2023-03-14

您可以从您的用户存储库中执行此操作,如下所示

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);
 类似资料:
  • 问题内容: 对于每个@Entity,我需要执行以下操作: 如果该实体不存在,则持久保存该实体,并知道其是否存在。尽管我意识到这不是继承关系,但我尝试使用Entity来实现@Entity。我可以使用什么类来引用每个JPA实体?我可以只创建一个接口/抽象类MyEntities并让它们全部继承,但是这样吗?我希望更少的代码。另外,我希望能够提取每个实体的主键,就像我在.getId()中尝试的那样。 问题

  • 问题内容: 有没有办法从mysql-database获取主键字段的名称?例如: 我有一张这样的桌子: 其中字段ID是主键(它具有自动递增功能,但我不能使用它)。如何在php中检索字段名称“ id”? 问题答案: 一种更好的方法是使用,因为您并不总是可以访问information_schema。以下作品: Column_name将包含主键的名称。

  • 我将JPA2与Hibernate一起使用。有两个实体类,和。最后一个是第一个的继承实体。使用SINGLE_TABLE继承策略。当我尝试通过从id=“123456”的CardElement中查询

  • 问题内容: 是否可以从Shell脚本中的父进程ID获取子进程ID? 我有一个要使用Shell脚本执行的文件,这会导致一个新进程 process1 (父进程)。这个 过程1 已经分叉的另一个进程 过程2 (子进程)。使用脚本,我可以使用以下命令获取 process1 的pid : 但我无法获取子进程的pid。 问题答案: 只需使用:

  • 是否可以从外壳脚本中的父进程ID获取子进程ID? 我有一个要使用shell脚本执行的文件,这会导致一个新的进程process1(父进程)。此进程1已经派生了另一个进程process2(子进程)。使用脚本,我可以使用以下命令获得进程1的pid: 但是我无法获取子进程的pid。

  • 问题内容: 给定一个表名,如何从plpgsql函数中提取主键列及其数据类型的列表? 问题答案: 上面的查询非常糟糕,因为它确实很慢。 我会推荐这个正式版本: http://wiki.postgresql.org/wiki/Retrieve_primary_key_columns 如果需要模式,查询如下