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

Проблема:

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

Я работаю над подпружиненным плагином JPA mongodb maven.
Я пытаюсь выполнить операцию вставки в Менеджере коллекции mongo и в диспетчере с помощьютолько один общий репозиторий и один и тот же класс супер сущностей.

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
{

}

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

@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();
        }
    }
}

...