我有以下3个 Hibernate
我的系统中的实体 Java
项目:
公司状态
@Entity(name = "company_status")
@Table(name = "company_status")
public class CompanyStatus implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@JsonProperty
@Column(name = "company_status_id")
private Integer companyStatusId;
@JsonProperty
@Column(name = "company_status_label")
private String companyStatusLabel;
}
员工状态
@Entity(name = "employee_status")
@Table(name = "employee_status")
public class EmployeeStatus implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonProperty
@Column(name = "employee_status_id")
private Integer employeeStatusId;
@JsonProperty
@Column(name = "employee_status_name")
private String employeeStatusName;
// many other fields
}
公司状态员工状态(链接两个实体的实体-一对一关系)
@Entity(name = "company_status_employee_status")
@Table(name = "company_status_employee_status")
public class CompanyStatusEmployeeStatus implements Serializable {
// int(20)
@Id
@JsonProperty
@Column(name = "company_status_id")
private Integer companyStatusId;
// int(20)
@JsonProperty
@Column(name = "employee_status_id")
private Integer employeeStatusId;
}
我只想将json响应中的必要字段返回到前端,因此为此我创建了一个较小的 CompanyStatusDTO
也有 EmployeeStatusDTO
嵌套列表
公司状态
public class CompanyStatusDTO {
@JsonProperty
private Integer companyStatusId;
@JsonProperty
private String companyStatusLabel;
@JsonProperty
private List <EmployeeStatusDTO> employeeStatusDTOs;
}
员工状态到
public class EmployeeStatusDTO {
@JsonProperty
private Integer employeeStatusId;
@JsonProperty
private String employeeStatusName;
}
但是,我对使用hibernate还比较陌生—有没有一种方法可以让我创建一个查询,直接从我的数据库Map结果 MySQL
数据库到我的 CompanyStatusDTO
反对?
如果是,我该怎么做?
3条答案
按热度按时间yhxst69z1#
您可以使用nativequery(数据类型必须匹配)将查询结果直接Map到所需的dto
zxlwwiss2#
这是blaze持久性实体视图的完美用例。
我创建了这个库,以便在jpa模型和自定义接口或抽象类定义的模型之间进行简单的Map,比如spring数据在steroids上的投影。其思想是以您喜欢的方式定义目标结构(域模型),并通过jpql表达式将属性(getter)Map到实体模型。
如果你能适应
CompanyStatus
以及CompanyStatusEmployeeStatus
添加一点实体并添加以下内容:您的模型可能如下所示:
查询是将实体视图应用于查询的问题,最简单的就是按id进行查询。
CompanyStatusDTO c = entityViewManager.find(entityManager, CompanyStatusDTO.class, id);
spring数据集成允许您像spring数据投影一样使用它:https://persistence.blazebit.com/documentation/entity-view/manual/en_us/index.html#spring-数据特征kninwzqo3#
你可以试试这个:
然后您可以在服务层中这样访问: