@Override public <T extends Entity> List<T> findAll(Query<T> query) throws UnifyException { try { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); if (sqlEntityInfo.testTrueFieldNamesOnly(query.getFields())) { return getSqlStatementExecutor().executeMultipleRecordResultQuery(connection, sqlDataSourceDialect.prepareFindStatement(query)); } SqlFieldInfo idFieldInfo = sqlEntityInfo.getIdFieldInfo(); List<?> idList = valueList(idFieldInfo.getFieldType(), idFieldInfo.getName(), query); if (!idList.isEmpty()) { Query<T> findQuery = query.copyNoCriteria(); findQuery.add(new Amongst(idFieldInfo.getName(), idList)); return getSqlStatementExecutor().executeMultipleRecordResultQuery(connection, sqlDataSourceDialect.prepareFindStatement(findQuery)); } } catch (UnifyException e) { throw e; } catch (Exception e) { throw new UnifyException(e, UnifyCoreErrorConstants.COMPONENT_OPERATION_ERROR, getClass().getSimpleName()); } return new ArrayList<T>(); }
@Override public <T, U extends Entity> Map<T, U> findAllMap(Class<T> keyClass, String keyName, Query<U> query) throws UnifyException { try { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); if (sqlEntityInfo.testTrueFieldNamesOnly(query.getFields())) { return getSqlStatementExecutor().executeMultipleRecordResultQuery(connection, keyClass, keyName, sqlDataSourceDialect.prepareFindStatement(query)); } SqlFieldInfo idFieldInfo = sqlEntityInfo.getIdFieldInfo(); List<?> idList = valueList(idFieldInfo.getFieldType(), idFieldInfo.getName(), query); if (!idList.isEmpty()) { Query<U> findQuery = query.copyNoCriteria(); findQuery.add(new Amongst(idFieldInfo.getName(), idList)); return getSqlStatementExecutor().executeMultipleRecordResultQuery(connection, keyClass, keyName, sqlDataSourceDialect.prepareFindStatement(findQuery)); } } catch (UnifyException e) { throw e; } catch (Exception e) { throw new UnifyException(e, UnifyCoreErrorConstants.COMPONENT_OPERATION_ERROR, getClass().getSimpleName()); } return new HashMap<T, U>(); }
@Override public <T, U extends Entity> Map<T, List<U>> findAllListMap(Class<T> keyClass, String keyName, Query<U> query) throws UnifyException { try { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); if (sqlEntityInfo.testTrueFieldNamesOnly(query.getFields())) { return getSqlStatementExecutor().executeMultipleRecordListResultQuery(connection, keyClass, keyName, sqlDataSourceDialect.prepareFindStatement(query)); } SqlFieldInfo idFieldInfo = sqlEntityInfo.getIdFieldInfo(); List<?> idList = valueList(idFieldInfo.getFieldType(), idFieldInfo.getName(), query); if (!idList.isEmpty()) { Query<U> findQuery = query.copyNoCriteria(); findQuery.add(new Amongst(idFieldInfo.getName(), idList)); return getSqlStatementExecutor().executeMultipleRecordListResultQuery(connection, keyClass, keyName, sqlDataSourceDialect.prepareFindStatement(findQuery)); } } catch (UnifyException e) { throw e; } catch (Exception e) { throw new UnifyException(e, UnifyCoreErrorConstants.COMPONENT_OPERATION_ERROR, getClass().getSimpleName()); } return new HashMap<T, List<U>>(); }
@Override public List<Aggregate<?>> aggregate(AggregateType aggregateType, Query<? extends Entity> query) throws UnifyException { try { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); if (sqlEntityInfo.testTrueFieldNamesOnly(query.getFields())) { return getSqlStatementExecutor().executeMultipleAggregateResultQuery(connection, sqlDataSourceDialect.getSqlTypePolicy(int.class), sqlDataSourceDialect.prepareAggregateStatement(aggregateType, query)); } SqlFieldInfo idFieldInfo = sqlEntityInfo.getIdFieldInfo(); List<?> idList = valueList(idFieldInfo.getFieldType(), idFieldInfo.getName(), query); if (!idList.isEmpty()) { Query<? extends Entity> aggregateQuery = query.copyNoCriteria(); aggregateQuery.add(new Amongst(idFieldInfo.getName(), idList)); return getSqlStatementExecutor().executeMultipleAggregateResultQuery(connection, sqlDataSourceDialect.getSqlTypePolicy(int.class), sqlDataSourceDialect.prepareAggregateStatement(aggregateType, aggregateQuery)); } } catch (UnifyException e) { throw e; } catch (Exception e) { throw new UnifyException(e, UnifyCoreErrorConstants.COMPONENT_OPERATION_ERROR, getClass().getSimpleName()); } return Collections.emptyList(); }
@Override public <T extends Entity> T find(Query<T> query) throws UnifyException { T record = null; try { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(SqlUtils.getEntityClass(query)); if (sqlEntityInfo.testTrueFieldNamesOnly(query.getFields())) { record = getSqlStatementExecutor().executeSingleRecordResultQuery(connection, sqlDataSourceDialect.prepareFindStatement(query), false); } else { SqlFieldInfo idFieldInfo = sqlEntityInfo.getIdFieldInfo(); List<?> idList = valueList(idFieldInfo.getFieldType(), idFieldInfo.getName(), query); if (!idList.isEmpty()) { Query<T> findQuery = query.copyNoCriteria(); findQuery.add(new Amongst(idFieldInfo.getName(), idList)); record = getSqlStatementExecutor().executeSingleRecordResultQuery(connection, sqlDataSourceDialect.prepareFindStatement(findQuery), false); } } fetchChildRecords(record, query.getSelect(), false); } catch (UnifyException e) { throw e; } catch (Exception e) { throw new UnifyException(e, UnifyCoreErrorConstants.COMPONENT_OPERATION_ERROR, getClass().getSimpleName()); } return record; }