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();
}
我正在编写 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();
}