仅从JPA查询中获取所选数据

仅从JPA查询中获取所选数据,jpa,repository,spring-data,spring-data-jpa,Jpa,Repository,Spring Data,Spring Data Jpa,我找不到任何好的解决方案只从域中获取选定的数据? 例如,我有一门课: @Entity public class Reservation { // private Integer RESERVATION_ID; // private Integer id; private long code; private Date date; private Client reservationClient; private WashType reservationWashType; private Veh

我找不到任何好的解决方案只从域中获取选定的数据? 例如,我有一门课:

@Entity
public class Reservation {

// private Integer RESERVATION_ID;
// private Integer id;
private long code;
private Date date;
private Client reservationClient;
private WashType reservationWashType;
private Vehicle reservationVehicle;
private Wash reservationWash;
private Worker reservationWorkerPesel;
private Review reservationReview;
private ReservationReminder reservationReminder;
 }
并具有简单的查询存储库

public interface ReservationRepository extends JpaRepository<Reservation, Long> {
Reservation findByCode(long code);
}
我想从该查询中获取保留对象,但没有来自Review、Worker等类的数据。 这意味着我的结果应该是: 整个保留对象包括: 代码、日期、客户端保留客户端、WashType保留WashType、车辆保留车辆、清洗保留Wash、保留提醒保留提醒


是否有可能以良好的方式排除它?或者,如果没有,我如何管理它?

是的,只要将Review和Worker标记为惰性加载,您就可以轻松地进行管理

我的意思是:

@ManyToOne(fetch = FetchType.LAZY)
private Review review;
在调用getReview之前,Hibernate不会尝试加载审阅关联

对于您希望在审阅时保留的情况,您只需要在查询时指定要获取关系联接

@Query("SELECT r FROM Reservation r JOIN FETCH r.review WHERE r.code = :code")
List<Reservation> findByCode(Long code);

请记住,如果Review不能为null,请确保@ManyToOne具有optional=false属性,以便在生成连接时,它使用内部连接而不是外部连接来避免性能开销。

Ok,我理解你的意思,但我无法理解:@QuerySELECT r FROM Reservation r JOIN FETCH r.review WHERE r.code=:code你为什么要加入评论?如果我们想要获取所有的子类,但是延迟加载呢?这正是JOIN FETCH所做的。这基本上就是在查询时如何覆盖映射模型中的延迟获取,以便Hibernate在基本查询中加载这些关联。从保留中选择r JOIN FETCH r.review JOIN FETCH r.worker其中r.code=:code不是您要求的,因为您说您实际上想要保留对象,但投影可能会更好地解决您的问题: