All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.moon.spring.data.jpa.factory.AbstractRepositoryQuery Maven / Gradle / Ivy

package com.moon.spring.data.jpa.factory;

import org.hibernate.query.NativeQuery;
import org.springframework.data.jpa.provider.QueryExtractor;
import org.springframework.data.projection.ProjectionFactory;
import org.springframework.data.repository.core.RepositoryMetadata;
import org.springframework.data.repository.query.QueryMethod;
import org.springframework.data.repository.query.RepositoryQuery;

import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Objects;

/**
 * @author moonsky
 */
public abstract class AbstractRepositoryQuery implements RepositoryQuery {

    private final RepositoryMetadata metadata;
    private final ProjectionFactory factory;
    private final QueryExtractor extractor;
    private final QueryMethod queryMethod;
    private final EntityManager em;
    private final Method method;
    private final JdbcAttributes sql;
    private final JpaRecordRepositoryMetadata repositoryContextMetadata;

    public AbstractRepositoryQuery(
        JdbcAttributes sql,
        Method method,
        RepositoryMetadata metadata,
        ProjectionFactory factory,
        QueryExtractor extractor,
        EntityManager em,
        JpaRecordRepositoryMetadata jpaRecordRepositoryMetadata
    ) {
        this.em = em;
        this.method = method;
        this.factory = factory;
        this.metadata = metadata;
        this.extractor = extractor;
        this.sql = Objects.requireNonNull(sql);
        this.queryMethod = new QueryMethod(method, metadata, factory);
        this.repositoryContextMetadata = jpaRecordRepositoryMetadata;
        Class returnCls = method.getReturnType();
        Type returnType = method.getGenericReturnType();
        if (returnType instanceof ParameterizedType) {
            ParameterizedType paramType = (ParameterizedType) returnType;
            Type rawType = paramType.getRawType();
            Type ownerType = paramType.getOwnerType();
            Type[] argsType = paramType.getActualTypeArguments();

        }

        Parameter[] parameters = method.getParameters();
        for (Parameter parameter : parameters) {
        }
    }

    @Override
    public Object execute(Object[] parameters) {
        Query query = em.createNativeQuery("SELECT * FROM `tb_user_part_details`");
        if (query instanceof NativeQuery) {
            NativeQuery nativeQuery = (NativeQuery) query;
            // nativeQuery.
            List list = query.getResultList();
            return list;
        } else {
            List list = query.getResultList();
            return list;
        }
    }

    @Override
    public QueryMethod getQueryMethod() { return queryMethod; }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy