Как работать с двумя различными коллекциями Spring Mongo одинаковой структуры, используя один класс сущностей и один универсальный репозиторий Mongo

Выпуск:

Spring создает две коллекции в mongodb с именем сотрудника суперкласса, менеджером и супервайзером базового класса. Я хочу запретить создание коллекции для сотрудника суперкласса в Монго ДБ к весне

Я работаю над подпружиненным плагином JPA Mongodb Maven.
Я пытаюсь выполнить операцию вставки в Mongo Collection Manager и Supervisor, используя только один общий репозиторий и один и тот же класс супер-сущностей.

manager
{
id:"abc",
name:"Deva",
age:26
}

supervisor
{
id:"abc",
name:"Raj",
age:25
}

Это мой класс сотрудников, который является суперклассом, который будет расширен классом моего менеджера и руководителя

public @Data class Employee
{
  private String id;
  private String name;
  private int age;
}

Класс менеджера привязан к менеджеру коллекции

@JsonInclude(JsonInclude.Include.NON_NULL)
@Document(collection="manager")
public @Data class Manager extends Employee
{

}

Класс Supervisor привязан к руководителю коллекции

@JsonInclude(JsonInclude.Include.NON_NULL)
@Document(collection="supervisor")
public @Data class Supervisor extends Employee
{

}

Реализация универсального интерфейса с одним методом save() для сохранения документа в коллекцию

public interface EmployeeService<T> 
{
    public T save(T employee);
}

@Service
public class EmployeeServiceImpl<T> implements EmployeeService<T> 
{
    @Autowired
    EmployeeRepository employeeRepository;

    @Override
    public T save(T obj) {
        return (T) employeeRepository.save(obj);
    }
}

Я создал репозиторий EmployeeRepository, который является универсальным и может использоваться как для документа по сбору документов менеджера, так и руководителя.

public interface EmployeeRepository<T extends Employee> extends MongoRepository<T, String> {
{

}

Это мой компонент, который будет вызывать, чтобы сохранить сотрудника в коллекции менеджера или руководителя монго.

@Component
public class EmployeeComponent<T> 
{

    @Autowired
    EmployeeService employeeService;

    private boolean updateEmployee(Employee employee) throws Exception 
    {

        Employee employees= employeeService.save(employee);

        if (employees.isEmpty())
        {
            System.out.println("Failed to save employees.");
            return "Failed to save employees.";
        }
        else
        {
            System.out.println("Success.");
            return "Success.";
        }
    }
}

Это мой контроллер, вызывающий функцию сохранения и переданный объект сотрудника или руководителя на основе условия

@RestController
@RequestMapping("test")
public class TestController {

@Autowired
EmployeeComponent<?> employeeComponent;
@Autowired
ObjectMapper mapper;

@RequestMapping(value="save/employee", method=RequestMethod.POST)
    public ResponseEntity<String> updateEmployee(@RequestBody String employeeString) throws ParseException, Exception
    {
        try 
        {
            Employee emp;
            boolean isEmployeeManager = true;
            > //Logic to convert string to class obj using ObjectMapper;
            if(isEmployeeManager)
            {
                emp = mapper.readValue(employeeString, Manager.class);
            }
            else
            {
                emp = mapper.readValue(employeeString, Supervisor.class);
            }
            return employeeComponent.updateEmployee(emp);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

0 ответов

Другие вопросы по тегам