Spring Boot 2 MongoDB @TypeAlias ​​не работает - PullRequest
0 голосов
/ 03 февраля 2020

В SpringBoot 1 TypeAlias ​​(«имя») работает должным образом, но если я перехожу на SpringBoot 2, он не создает экземпляры классов правильно.

@Document(collection = "test")
@TypeAlias("y")
public class TestY extends Test {

    private String y;

    public String getY() {
        return y;
    }

    public void setY(String y) {
        this.y = y;
    }
}

@Document(collection = "test")
public class Test {
    @Id
    protected String id;

    public Test() {
        this.id = id;
    }
}

@Document(collection = "test")
@TypeAlias("x")
public class TestX extends Test {

    private String x;

    public String getX() {
        return x;
    }

    public void setX(String x) {
        this.x = x;
    }
}

Выполнения:

Если я загружаю только экземпляры -> Тестовые экземпляры должны быть TestX или TestY, но все они являются Test

List<Test> test = testRepository.findAll();

Если я сохраню до Сущности -> Тестовые экземпляры после загрузки создаются прямо как TestX и TestY

        TestY y = new TestY();
        y.setY("y");
        testRepository.save(y);

        TestX x = new TestX();
        x.setX("x");
        testRepository.save(x);
        List<Test> test = testRepository.findAll();

В Spring Boot 1 он работает как положено.

Зависимости

до: spring-boot-starter-data-mongodb-1.5.21.RELEASE

после: spring-boot-starter-data-mongodb-2.1.11.RELEASE

Репозитории

@Repository
public interface TestRepository extends MongoRepository<Test, String> {

}

1 Ответ

0 голосов
/ 04 февраля 2020

Spring Data опирается на объявленные (generi c typed ) репозитории для обработки ваших сущностей.

Чтобы иметь возможность использовать полиморфизм, с Подтипы читаются и хранятся как их конкретные типы, вы должны объявить Repository для каждой из постоянных сущностей:

@Repository
public interface TestYRepository extends MongoRepository<TestY, String> {}

@Repository
public interface TestXRepository extends MongoRepository<TestX, String> {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...