WorkLoadUserSupplierRepositoryImpl.java

package com.tradecloud.repository.workload.impl;

import com.tradecloud.authentication.User;
import com.tradecloud.domain.supplier.Supplier;
import com.tradecloud.domain.workload.WorkLoadUserSupplier;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import com.tradecloud.repository.workload.WorkLoadUserSupplierRepository;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.Query;
import java.util.List;
import java.util.Optional;

@Repository(value = "workLoadUserSupplierRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class WorkLoadUserSupplierRepositoryImpl extends RepositoryBaseImpl<WorkLoadUserSupplier, Object> implements WorkLoadUserSupplierRepository {
    @Override
    public List<Supplier> findAllSuppliersLinkedToUser() {
        String querySql = "SELECT s  from WorkLoadUserSupplier w join w.suppliers s  ";
        Query query = getSessionCustom().createQuery(querySql);
        return  query.getResultList();
    }

    @Override
    public List<Supplier> findUserSuppliers(User user) {
        String querySql = "SELECT s  from WorkLoadUserSupplier w join w.suppliers s  where s.user=:user ";
        Query query = getSessionCustom().createQuery(querySql);
        return  query.setParameter("user",user).getResultList();
    }

    @Override
    public Optional<User> findUserWithUSupplier(long supplierId) {
        String querySql = "SELECT w.user FROM WorkLoadUserSupplier w JOIN w.suppliers s WHERE s.id = :supplierId";
        Query query = getSessionCustom().createQuery(querySql);

        query.setParameter("supplierId", supplierId);
        query.setMaxResults(1); // Limit results properly

        return query.getResultList().stream().findFirst();
    }

    }