如何调用spring存储库的本机查询(连接三个表和表没有任何关系)

时间:2018-01-23 15:49:26

标签: java spring hibernate spring-boot spring-repositories

我有三个名为 SLSNotification,SLSWorkflow和Importer 的表 这些表不是任何关系......我想得到三个表来进行jasper报告..所以我为它创建一个原生查询..它在MySQL上工作正常......但是当我将它添加到SLSWorkflowRepository只检索工作流类时..我想从这个存储库中获取其他类...我认为它只检索因为我这样写这个

  @Query(value = "select * from slsnotification a join sls_wrkflw b on a.snumber = b.snumber join importers c on c.importer_vat_number =  a.importervat where a.importervat = :importerVatNumber and a.snumber = :snumber", nativeQuery = true)
    Object getForPrint(@Param("snumber") Long snumber,@Param("importerVatNumber") String importerVatNumber);

我可以为 SLSIWorkflow getForPrint()找到其他类吗?

如果我错了,请给出一些另一种方式...

这是我的模特

SLSNotification模型     @实体     @Table(name =“slsnotification”)     公共类SLSNotification {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(length = 16)
    private Long snumber;

    @Column(length = 100)
    private String serialCord;

    private String date;
//    @JsonFormat(pattern = "yyyy-MM-dd")
//    private Date appPostdate = new Date();
    @Column(nullable = false)
    private String appPostdate;

    @Column(length = 8)
    private String cusOffice;

    @Column(length = 1)
    private String cusSerial;

    @Column(length = 50)
    private String cusDecNo;

    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date cusDate;

    @Column(length = 300)
    private String manufacturer;

    @Column(length = 300)
    private String exporterAddress;

    @Column(length = 20, nullable = false)
    private String importerVAT;

    @NotEmpty
    @Column(length = 20, nullable = false)
    private String declarantVAT;

    private String declarantDetails;

    private String vessel;

    private String blNo;

    private String loadingPort;

    private String tradingCountry;

    private String countryOrigin;

    private String invoiceNo;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date invoiceDate;

    private Double invoiceValue;


    public Long getSnumber() {
        return snumber;
    }

    public void setSnumber(Long snumber) {
        this.snumber = snumber;
    }

    public String getSerialCord() {
        return serialCord;
    }

    public void setSerialCord(String serialCord) {
        this.serialCord = serialCord;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getCusOffice() {
        return cusOffice;
    }

    public void setCusOffice(String cusOffice) {
        this.cusOffice = cusOffice;
    }

    public String getCusSerial() {
        return cusSerial;
    }

    public void setCusSerial(String cusSerial) {
        this.cusSerial = cusSerial;
    }

    public String getCusDecNo() {
        return cusDecNo;
    }

    public void setCusDecNo(String cusDecNo) {
        this.cusDecNo = cusDecNo;
    }

    public Date getCusDate() {
        return cusDate;
    }

    public void setCusDate(Date cusDate) {
        this.cusDate = cusDate;
    }

    public String getManufacturer() {
        return manufacturer;
    }

    public void setManufacturer(String manufacturer) {
        this.manufacturer = manufacturer;
    }

    public String getExporterAddress() {
        return exporterAddress;
    }

    public void setExporterAddress(String exporterAddress) {
        this.exporterAddress = exporterAddress;
    }

    public String getImporterVAT() {
        return importerVAT;
    }

    public void setImporterVAT(String importerVAT) {
        this.importerVAT = importerVAT;
    }

    public String getDeclarantVAT() {
        return declarantVAT;
    }

    public void setDeclarantVAT(String declarantVAT) {
        this.declarantVAT = declarantVAT;
    }

    public String getVessel() {
        return vessel;
    }

    public void setVessel(String vessel) {
        this.vessel = vessel;
    }

    public String getBlNo() {
        return blNo;
    }

    public void setBlNo(String blNo) {
        this.blNo = blNo;
    }

    public String getLoadingPort() {
        return loadingPort;
    }

    public void setLoadingPort(String loadingPort) {
        this.loadingPort = loadingPort;
    }

    public String getTradingCountry() {
        return tradingCountry;
    }

    public void setTradingCountry(String tradingCountry) {
        this.tradingCountry = tradingCountry;
    }

    public String getCountryOrigin() {
        return countryOrigin;
    }

    public void setCountryOrigin(String countryOrigin) {
        this.countryOrigin = countryOrigin;
    }

    public String getInvoiceNo() {
        return invoiceNo;
    }

    public void setInvoiceNo(String invoiceNo) {
        this.invoiceNo = invoiceNo;
    }

    public Date getInvoiceDate() {
        return invoiceDate;
    }

    public void setInvoiceDate(Date invoiceDate) {
        this.invoiceDate = invoiceDate;
    }

    public Double getInvoiceValue() {
        return invoiceValue;
    }

    public void setInvoiceValue(Double invoiceValue) {
        this.invoiceValue = invoiceValue;
    }

SLSWorkflow模型

@Entity
@Table(name = "sls_wrkflw")
public class SLSIWorkflow {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long SNumber;

    private String qc;
    private String inv;
    private String manuTr;
    private String packList;
    private String blAttached;
    private String otherDoc;
    private String otherDocName;
    private String ad;
    private String MAUsername;
    private String appMan;
    private String accptdQc;
    private String accptTR;
    private String manufacturer;
    private String validMark;
    private String otherDocBoolean;
    private String cnfrmtyTest;
    private String dtSampling;
    private String otherDocDet;
    private String adUsername;
    private String recom;
    private String reaRec;
    private String tests;
    private String wfStatus;

    public Long getSNumber() {
        return SNumber;
    }

    public void setSNumber(Long SNumber) {
        this.SNumber = SNumber;
    }

    public String getQc() {
        return qc;
    }

    public void setQc(String qc) {
        this.qc = qc;
    }

    public String getInv() {
        return inv;
    }

    public void setInv(String inv) {
        this.inv = inv;
    }

    public String getManuTr() {
        return manuTr;
    }

    public void setManuTr(String manuTr) {
        this.manuTr = manuTr;
    }

    public String getPackList() {
        return packList;
    }

    public void setPackList(String packList) {
        this.packList = packList;
    }

    public String getBlAttached() {
        return blAttached;
    }

    public void setBlAttached(String blAttached) {
        this.blAttached = blAttached;
    }

    public String getMaattachUser() {
        return maattachUser;
    }

    public void setMaattachUser(String maattachUser) {
        this.maattachUser = maattachUser;
    }

    public String getMauser() {
        return mauser;
    }

    public void setMauser(String mauser) {
        this.mauser = mauser;
    }

    public String getMareattachUser() {
        return mareattachUser;
    }

    public void setMareattachUser(String mareattachUser) {
        this.mareattachUser = mareattachUser;
    }

    public String getOtherDoc() {
        return otherDoc;
    }

    public void setOtherDoc(String otherDoc) {
        this.otherDoc = otherDoc;
    }

    public String getOtherDocName() {
        return otherDocName;
    }

    public void setOtherDocName(String otherDocName) {
        this.otherDocName = otherDocName;
    }
}

导入器型号

@Entity
@Table(name = "importers")
public class Importer {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "importer_id")
    private long importerId;

    private String importerBrc;

    @NotEmpty
    @Column(unique = true, nullable = false)
    private String importerVatNumber;
     @Column(nullable = false)
    private String category;
    private String importerSVatNumber;
    @NotEmpty
    private String importerName;
    private String importerAddress1;

    @NotEmpty
    private String officePhoneNumber;
    @NotEmpty
    private String mobilePhoneNumber;

    @Email
    @NotEmpty
    private String email;

    @Email
    private String optemail1;

    @Email
    private String optemail2;

    @NotEmpty
    private String userIDandTime;

    @NotEmpty
    private String recentUpdateBy;

    public String getOptemail1() {
        return optemail1;
    }

    public void setOptemail1(String optemail1) {
        this.optemail1 = optemail1;
    }

    public String getOptemail2() {
        return optemail2;
    }

    public void setOptemail2(String optemail2) {
        this.optemail2 = optemail2;
    }

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(name = "importer_agents",
            joinColumns = {
                @JoinColumn(name = "importerId")},
            inverseJoinColumns = {
                @JoinColumn(name = "agentId")})
    private List<Agent> agentList;

    public String getImporterBrc() {
        return importerBrc;
    }

    public void setImporterBrc(String importerBrc) {
        this.importerBrc = importerBrc;
    }

    public String getImporterVatNumber() {
        return importerVatNumber;
    }

    public void setImporterVatNumber(String importerVatNumber) {
        this.importerVatNumber = importerVatNumber;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public String getImporterSVatNumber() {
        return importerSVatNumber;
    }

    public void setImporterSVatNumber(String importerSVatNumber) {
        this.importerSVatNumber = importerSVatNumber;
    }



    public String getImporterName() {
        return importerName;
    }

    public void setImporterName(String importerName) {
        this.importerName = importerName;
    }

    public String getImporterAddress1() {
        return importerAddress1;
    }

    public void setImporterAddress1(String importerAddress1) {
        this.importerAddress1 = importerAddress1;
    }
}

SLSIWorkflowRepository

public interface SLSIWorkflowRepository extends CrudRepository<SLSIWorkflow,Long> {

    @Override
    SLSIWorkflow save(SLSIWorkflow slsiWorkflow);

    @Override
    SLSIWorkflow findOne(Long Long);

    @Override
    boolean exists(Long Long);

    @Override
    Iterable<SLSIWorkflow> findAll();

    @Override
    long count();

    @Override
    void delete(SLSIWorkflow entity);



 @Query(value = "select * from slsnotification a join sls_wrkflw b on a.snumber = b.snumber join importers c on c.importer_vat_number =  a.importervat where a.importervat = :importerVatNumber and a.snumber = :snumber", nativeQuery = true)
Object getForPrint(@Param("snumber") Long snumber,@Param("importerVatNumber") String importerVatNumber);

WorkflowServices执行

public class WorkflowServices {

    private static final Logger serviceLogger = LogManager.getLogger(WorkflowServices.class);

    private static final String INIT_WORKFLOW_STATUS = "INIT";

    @Autowired
    private SLSIWorkflowRepository workflowRepository;

    @Autowired
    private FileSystemStorageService storageService;

    @Autowired
    private SLSNotificationRepository slsNotificationRepository;

    public void initWorkflow(Long slsNumber) {
        SLSIWorkflow workflow = new SLSIWorkflow();
        workflow.setSNumber(slsNumber);
        workflow.setWfStatus(INIT_WORKFLOW_STATUS);
        workflowRepository.save(workflow);
    }


    public SLSIWorkflow getApplicationForPrint(Long SNumber, String importerVatNumber) {
        return workflowRepository.getForPrint(SNumber, importerVatNumber);
    }
}

工作流程控制器//这个很大,我只给我的电话

@RequestMapping(path = "/viewTAXInvoice/{snumber}/{importerVatNumber}", method = RequestMethod.POST)
    public ModelAndView getPDFReport(@PathVariable("snumber") String snumber, @PathVariable("importerVatNumber") String importerVatNumber) {
        File reportsDir = Paths.get(servletContext.getRealPath(reportDataLocation)).toFile();
        if (!reportsDir.exists()) {
            throw ProductWithSameSerialExistsException.getInstance();
        }

        JRDataSource dataSource = new JRBeanCollectionDataSource(Arrays.asList(workflowServices.getApplicationForPrint(Long.parseLong(snumber), importerVatNumber)));
        Map<String, Object> parameterMap = new HashMap<>();
        parameterMap.put("datasource", dataSource);
        parameterMap.put("JasperCustomSubReportDatasource", dataSource);
        parameterMap.put(JRParameter.REPORT_FILE_RESOLVER, new SimpleFileResolver(reportsDir));
        System.out.println("Dt Source1 "+dataSource);
        return new ModelAndView("pdfReportforVAT", parameterMap);
    }

如何连接三张桌子......请帮帮我一个人......

1 个答案:

答案 0 :(得分:0)

您只获得SLSIWorkflow,因为您只在WorkflowServices的以下代码中返回该实体。

public SLSIWorkflow getApplicationForPrint(Long SNumber, String importerVatNumber) {
    return workflowRepository.getForPrint(SNumber, importerVatNumber);
}

如果您返回Object,则会将表格slsnotificationsls_wrkflwimporters中的所有字段设为Object[]

另外,使用普通JOIN,默认情况下会产生INNER JOIN。如果一个联合表不满足ON条件,则不会返回任何内容。如果您使用LEFT JOIN以便返回null,那就太好了。