写带有外键id的JPA实体,读join实体



我有两个实体,AB,它们通过JPA持久化到关系数据库。

public class A {
@Id
private String id;
private String bId;
}
public class B {
@Id
private String id;
private String field;
}

注意A没有B属性,而只有它的id。在我的用例中,在持久化A实体时,B实体当前不存在,稍后写入db。然而,在读取时,我非常想访问A对象与相应的B实体,如果它已经存在于数据库中(或null否则)-与单个JPA查询。

我怎么能这么做?

提前感谢!

您可以将HQL/JPQL查询与投影一起使用,以实现您所需要的。例如,考虑以下存储库、实体和投影类:

<<ol>
  • 库/gh>
    @Repository
    public interface PersonRepository extends JpaRepository<Person, Long> {
    @Query("SELECT P.id AS id, P.detailsId AS detailsId, P.name AS name, PD as detail "
    + "FROM Person P "
    + "JOIN PersonDetails PD "
    + "ON P.detailsId = PD.id")
    List<PersonDetailProjection> findJoined();
    }
    
  • 实体
  • @Data
    @Entity(name = "Person")
    @Table(name = "person")
    public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    private Long detailsId;
    }
    

    @Data
    @Entity(name = "PersonDetails")
    @Table(name = "person_details")
    public class PersonDetails {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String address;
    }
    
  • 投影
  • public interface PersonDetailProjection {
    Long getId();
    Long getDetailsId();
    String getName();
    PersonDetails getDetail();
    }
    

    您可以修改查询以包含WHERE子句,但基本要点是您所看到的。请注意,我仍然不明白为什么您想要这样做查询,特别是考虑到设置它所花费的工作量。

    最新更新