關於jpa與SQL結合的幾種查詢

1.查詢結果爲各個表各個字段(切記要查出primary key,以防後面要更新該數據)

@SuppressWarnings("unchecked")
    @Override
    public List<TPMSFine> getAlertFailFines(AlertFinishStatus failAlert) {
        String selectFields = "tf.id,tf.txnno,tpmsts.certno,tf.finePayDate,tf.operator,"
                + "tf.amount,tf.indictmentNo,tf.indictmentSendDate,tf.penaltyNoticeNo,tf.penaltyNoticeDate,"
                + "tf.penaltyNoticeNoSec,tf.penaltyNoticeDateSec
";
        String sql = "SELECT " + selectFields + " FROM " + table(TPMSFine.class) + " tf"
                + " inner join tpmstransaction tpmsts on tpmsts.TRANSACTIONDETAILS_TXNNO = tf.txnno"
                + " where tf.ALERTFINISHSTATUS is not null and  tf.ALERTFINISHSTATUS = :alertFinishStatus";
        Query query = em.createNativeQuery(sql);
        query.setParameter("alertFinishStatus", failAlert.ordinal());枚舉類
        List<TPMSFine> tpmsFineList = new ArrayList<TPMSFine>();
        List<Object[]> resultList = query.getResultList();
        for (Object[] objects : resultList) {
            TPMSFine tpmsFine = new TPMSFine();
            tpmsFine.setId(Long.valueOf(objects[0].toString()));      結果映射,類似JDBC
            tpmsFine.setUniqueryCode((String)objects[1]);
            tpmsFine.setCertNo(Long.valueOf(objects[2].toString()));
            tpmsFine.setFinePayDate((java.util.Date)objects[3]);
            tpmsFine.setOperator((String)objects[4]);
            tpmsFine.setAmount(Double.valueOf(objects[5].toString()));
            tpmsFine.setIndictmentNo((String)objects[6]);
            tpmsFine.setIndictmentSendDate((java.util.Date)objects[7]);
            tpmsFine.setPenaltyNoticeNo((String)objects[8]);
            tpmsFine.setPenaltyNoticeDate((java.util.Date)objects[9]);
            tpmsFine.setPenaltyNoticeNoSec((String)objects[10]);
            tpmsFine.setPenaltyNoticeDateSec((java.util.Date)objects[11]);

            tpmsFineList.add(tpmsFine);
        }
        return tpmsFineList;
    }

 

2.在類上結合@SqlResultSetMapping()註解映射

@SuppressWarnings("unchecked")
    @Override
    public List<Transaction> getTransactionsDepositable(SearchTransactionParam param, long first, long count) {
        List<Integer> status = new ArrayList<Integer>();
        for (WorkflowStatus workflowStatus : param.getWorkflowStatus()) {
            status.add(workflowStatus.ordinal());
        }
        String selectFields = "distinct t.*," + getTxnContentSelectFields();
        String sql = "select " + selectFields + " from " + table(Transaction.class) + " t " + "inner join "
                + table(ServiceOperation.class) + " so on so.id = t.serviceoperation_id " + "inner join "
                + table(Service.class) + " s on s.id = so.service_id " + "inner join " + table(Payment.class)
                + " p on p.id = t.payment_id " + "inner join  " + table(Zone.class) + " z on z.id = t.zone_id "
                + " left join " + table(TransactionContent.class) + " tc on t.txnno = tc.txnno "
                + " where t.createUid = :createUid and t.workflowStatus in (:workflowStatus) and p.paymentDate = :paymentDate and z.code = :zoneCode ";
        if (param.getDepositBatch() != null) {
            sql += " and t.depositBatch = :depositBatch ";
        }
        sql += " ORDER BY t.createTime desc";
        Query query = em.createNativeQuery(sql, "FullTransaction");
        query.setParameter("createUid", param.getOwnerId());
        query.setParameter("paymentDate", param.getPaymentDate() == null ? new Date() : param.getPaymentDate());
        query.setParameter("zoneCode", param.getZoneCode());
        query.setParameter("workflowStatus", status);
        if (param.getDepositBatch() != null) {
            query.setParameter("depositBatch", param.getDepositBatch());
        }
        List<Transaction> transactions = new ArrayList<Transaction>();
        List<Object[]> resultList = query.getResultList();
        for (Object[] objects : resultList) {
            Transaction transaction = (Transaction) objects[0];
            transaction.setTransactionContent((TransactionContent) objects[1]);
            transactions.add(transaction);
        }
        return transactions;
        // return searchTransactions(param, first, count, "t.createTime desc");
    }

------------------------:>java類 

查詢的結果不同於列映射名稱的情況下,@FieldResult註解將列的別名映射到實體的字段上

@SuppressWarnings("rawtypes")
@Entity
@SqlResultSetMapping(name = "FullTransaction", entities = { @EntityResult(entityClass = Transaction.class),
        @EntityResult(entityClass = TransactionContent.class, fields = {
                @FieldResult(name = "txnNo", column = "tc_txnNo"), @FieldResult(name = "idNo", column = "tc_idNo"),
                @FieldResult(name = "clientName", column = "tc_clientName"),
                @FieldResult(name = "clientIdTypeCode", column = "tc_clientIdTypeCode"),
                @FieldResult(name = "clientTel", column = "tc_clientTel"),
                @FieldResult(name = "clientOtherTel", column = "tc_clientOtherTel"),
                @FieldResult(name = "agentName", column = "tc_agentName"),
                @FieldResult(name = "agentTel", column = "tc_agentTel"),
                @FieldResult(name = "agentOtherTel", column = "tc_agentOtherTel"),
                @FieldResult(name = "applicantType", column = "tc_applicantType"),
                @FieldResult(name = "smsClient", column = "tc_smsClient"),
                @FieldResult(name = "smsAgent", column = "tc_smsAgent"),
                @FieldResult(name = "clientEmail", column = "tc_clientEmail"),
                @FieldResult(name = "agentEmail", column = "tc_agentEmail"),
                @FieldResult(name = "clientLangCode", column = "tc_clientLangCode"),
                @FieldResult(name = "agentLangCode", column = "tc_agentLangCode"),
                @FieldResult(name = "fileNo", column = "tc_fileNo"),
                @FieldResult(name = "fileTypeCode", column = "tc_fileTypeCode"),
                @FieldResult(name = "clientNamePt", column = "tc_clientNamePt"),
                @FieldResult(name = "agentNamePt", column = "tc_agentNamePt"),
                @FieldResult(name = "agentIdNo", column = "tc_agentIdNo"),
                @FieldResult(name = "agentIdTypeCode", column = "tc_agentIdTypeCode"),
                @FieldResult(name = "docId", column = "tc_docId"), @FieldResult(name = "vId", column = "tc_vId"),
                @FieldResult(name = "categoryTypeCode", column = "tc_categoryTypeCode"),
                @FieldResult(name = "categoryNo", column = "tc_categoryNo"),
                @FieldResult(name = "driverLicType", column = "tc_driverLicType"),
                @FieldResult(name = "driverLicNo", column = "tc_driverLicNo") }) })
public class Transaction implements IClusterable, TxnNoProvider, Identifiable, PreUpdateEntity, Auditable, Receipt,
        PaymentHolder, Comparable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    private Long id;

 

參考:https://blog.csdn.net/ditto_zhou/article/details/80830970

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章