库/gh>
我有两个实体,A
和B
,它们通过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>@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
子句,但基本要点是您所看到的。请注意,我仍然不明白为什么您想要这样做查询,特别是考虑到设置它所花费的工作量。