【发布时间】:2018-10-16 08:15:06
【问题描述】:
我有两个实体负责从两个不同的表中获取数据,并且我创建了一个类来显示这两个实体的组合结果。我能够使用 JPA 获取数据,但输出不是所需的 JSON 格式。
第一个实体,
@Entity
@Table(name="basicinfo")
public class Rfx_BasicInfo implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String uniqueid;
private String description;
private String uniqueidstatus;
private LocalDateTime startdate;
private LocalDateTime enddate;
private String createdby;
public String getCreatedby() {
return createdby;
}
public Long getId() {
return id;
}
public String getUniqueid() {
return uniqueid;
}
public String getDescription() {
return description;
}
public LocalDateTime getStartdate() {
return startdate;
}
public LocalDateTime getEnddate() {
return enddate;
}
public String getUniqueidstatus() {
return uniqueidstatus;
}
}
第二个,
@Entity
@Table(name="supplierinvite")
public class Rfx_SupplierInvite {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String externalstatus;
private String uniqueid;
public String getExternalstatus() {
return externalstatus;
}
public String getUniqueid() {
return uniqueid;
}
}
这两个是我创建的实体的存储库。
@Repository("rfxBasicInfoRepository")
public interface Rfx_BasicInfoRepository extends JpaRepository<Rfx_BasicInfo,Long> {
@Query(value="SELECT u from Rfx_BasicInfo u where u.createdby = :createdby")
List<Rfx_BasicInfo> findReportByLoginId(@Param("createdby") String createdby);
}
@Repository("rfxSupplierInviteRepository")
public interface Rfx_SupplierInviteRepository extends JpaRepository<Rfx_SupplierInvite,Long> {
@Query(value="SELECT u.uniqueid, u.externalstatus, count(u.externalstatus) from Rfx_SupplierInvite u where u.uniqueid in (:uniqueid) group by u.uniqueid,u.externalstatus order by u.uniqueid, u.externalstatus")
List<Rfx_SupplierInvite> findReportByUniqueId(@Param("uniqueid") String uniqueid);
}
在第一个存储库中,我根据“createdby”字段获取数据,在第二个存储库中,我根据“uniqueid”字段获取数据。这个“唯一”字段在两个表之间是通用的。截至目前,我已尝试单独获取结果并使用类将它们合并为一个。我没有使用任何 JPA 映射和联接,因为我不确定如何在此处正确使用它。
public class Rfx_Model {
private List<Rfx_BasicInfo> rfx_basicInfoList;
private List<Rfx_SupplierInvite> rfx_supplierInviteList;
public Rfx_Model(List<Rfx_BasicInfo> rfx_basicInfoList, List<Rfx_SupplierInvite> rfx_supplierInviteList) {
this.rfx_basicInfoList = rfx_basicInfoList;
this.rfx_supplierInviteList = rfx_supplierInviteList;
}
public List<Rfx_BasicInfo> getRfx_basicInfoList() {
return rfx_basicInfoList;
}
public List<Rfx_SupplierInvite> getRfx_supplierInviteList() {
return rfx_supplierInviteList;
}
}
这是我的控制器,
@RequestMapping(value="/buyerLandingReport/{LoginID}",method = RequestMethod.GET)
public ResponseEntity<Object> buyerLandingReport(@PathVariable("LoginID") String LoginID) {
try{
List<Rfx_BasicInfo> list1 = rfxBasicInfoRepository.findReportByLoginId(LoginID);
List<Rfx_SupplierInvite> list2 = rfxSupplierInviteRepository.findReportByUniqueId(list1.get(0).getUniqueid());
return new ResponseEntity(new Rfx_Model(list1,list2),HttpStatus.OK);
}
catch (Exception ex){
throw ex;
}
}
下面是当前的 JSON 输出,
{
"Rfx_BasicInfo": [
{
"id": 1,
"uniqueid": "RA001",
"description": "sbhdjajd",
"uniqueidstatus": "ajsd",
"startdate": "2018-05-04T12:00:00",
"enddate": "2018-05-04T12:00:00",
"createdby": "RIL01"
},
{
"id": 2,
"uniqueid": "RA001",
"description": "kasksj",
"uniqueidstatus": "sjkds",
"startdate": "2018-05-04T12:00:00",
"enddate": "2018-05-04T12:00:00",
"createdby": "RIL01"
},
{
"id": 3,
"uniqueid": "RA002",
"description": "asjhkdj",
"uniqueidstatus": "asjhd",
"startdate": "2018-05-04T12:00:00",
"enddate": "2018-05-04T12:00:00",
"createdby": "RIL01"
}
],
"Rfx_SupplierInvite": [
[
"uniqueid": "RA001",
"externalstatus":"AC",
"count": 1
],
[
"uniqueid": "RA001",
"externalstatus": "IN",
"count": 2
]
]
}
所需的 JSON 输出格式就是这个,
[
{
"Rfx_BasicInfo": {
"id": 1,
"uniqueid": "RA001",
"description": "Auction for taking bid for work on route Tirora Gondiya",
"uniqueidstatus": "PB",
"startdate": "2018-05-04T12:00:00",
"enddate": "2018-05-04T14:00:00",
"createdby": "RIL03"
},
"Rfx_Supplier" : [
{
"uniqueid": "RA001",
"externalstatus": "AC",
"count": 1
},
{
"uniqueid": "RA001",
"externalstatus": "IN",
"count": 2
}
]
},
{
"Rfx_BasicInfo": {
"id": 2,
"uniqueid": "RA002",
"description": "Auction for taking bid for work on route Gondiya - Amgaon",
"uniqueidstatus": "DR",
"startdate": "2018-05-04T14:00:00",
"enddate": "2018-05-04T16:00:00",
"createdby": "RIL03"
},
"Rfx_Supplier" : [
{
"uniqueid": "RA002",
"ExternalStatus": "AC",
"count": 1
},
{
"uniqueid": "RA002",
"ExternalStatus": "IN",
"count": 2
}
]
}
]
非常感谢任何能帮助我找出解决方案的建议。
【问题讨论】:
标签: java json spring-boot spring-data-jpa