Spring 同一数据库的 JPA 两个实体 table

Spring JPA Two Entities for same DB table

我正在编写 Spring Boot Data JPA 应用程序,我遇到以下情况:

我有 2 个数据库查询从同一个 table 获取,但它们根据 WHERE 子句获取不同的列和数据。例如:

SELECT CAR_TYPE, CAR_MODEL, CAR_YEAR, ACCIDENT_YEAR, BUY_DAY FROM CAR WHERE ACCIDENT_YEAR IS NULL

,以及

SELECT CAR_MODEL, CAR_YEAR FROM CAR WHERE CAR_YEAR >= CURRENT_YEAR

如您所见,这 2 个查询(其结果将通过 2 个不同的 API 点显示)引用相同的 table CAR,但 return 个不同的字段并有不同的 WHERE 个子句。

我知道在 JPA 中,我必须创建一个实体 CarEntity,例如:

@Entity
@Table(name = "CAR")
public class CarEntity {
   // I can only have fields from one or the other query 
   // here, so I guess I have to have 2 of these
}

,但我的问题是这个实体需要申请 2 个不同的查询(具有不同的字段 returned,不同的数据,不同的 WHERE 子句)。

所以,看起来我实际上必须有 2 CarEntity 类。但是,我不确定如何制作这 2 个 CarEntities,所以它们都引用相同的 table CAR?

你可以通过使用投影来实现,基本上你定义了一个接口,其中包含你想要获取它们的字段方法。 Projections

@Entity
public class Car implement CarSummary { // if you want you can implement JIC
  
  private UUID id;
  private String carType;
  private String carModel;
  private LocalDateTime carYear;
  
  //getters and setters

}


public interface CarSummary {

  String getCardModel();
  String getCarYear();

}

然后根据您的查询。

public interface CarRepository extends Repository<Car, UUID> {
  Collection<CarSummary> findByCarYearGreaterThan(LocalDateTime now);
  Collection<Car> findByAccidentYearIsNull();
}