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