весенний ботинок mongodb @dbref каскад не работает - PullRequest
0 голосов
/ 01 марта 2019

Я борюсь с каскадными операциями Spring Boot MongoDB над ссылочными объектами.Ниже приведены классы схем документов MongoDB.

== Опубликовать

@Getter
@Setter
@Document(collection="Post") // (1)
public class Post {

    @Id
    private String _id;

    @Indexed(unique = true) 
    private Long id; 

    private String title;

    private String body;

    private Date createdDate;

    @DBRef(db = "User", lazy = true) 
    private User user;

    @DBRef(db = "Tag", lazy = true) 
    private Collection<Tag> tags;

== Пользователь

@Getter
@Setter
@Document(collection="User") // (1)
public class User {

    @Id //(2)
    private String _id;

    @Indexed(unique = true)
    private Long id;

    @Indexed(unique=true)  // (3) 
    private String username;

    private String password;

    private String email;

    private String fullname;

    private String role;
}

== Tag

@Getter
@Setter
@Document(collection="Tag")
public class Tag {

    @Id
    private String _id;

    @Indexed(unique = true)
    private Long mid;

    private String body;

    private Date createdDate;

    @DBRef(db = "User", lazy = true) 
    private User user;
}

Но аннотация @DBRef вообще не работает.Выдает следующее исключение:

2019-03-01 14:54:10.411 ERROR 5756 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.mapping.MappingException: Cannot create a reference to an object with a NULL id.] with root cause

org.springframework.data.mapping.MappingException: Cannot create a reference to an object with a NULL id.
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.createDBRef(MappingMongoConverter.java:975) ~[spring-data-mongodb-2.1.4.RELEASE.jar:2.1.4.RELEASE]
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:597) ~[spring-data-mongodb-2.1.4.RELEASE.jar:2.1.4.RELEASE]

Когда файл json импортируется в схему MongoDB, появляется указанная выше ошибка.Я нашел ссылку site с googling, в которой говорится, что для генерации нового источника событий используется класс CascadingMongoEventListener и пользовательская аннотация @CascadeSave.Но я думаю, что есть другие решения с некоторыми каскадными аннотациями.Любая идея, пожалуйста.

1 Ответ

0 голосов
/ 01 марта 2019

Mongo не поддерживает отношения между documents.Из-за этого каскадная операция не поддерживает весной данные монго.Вы можете сделать это двумя способами.

1) Создайте свой собственный каскадный обработчик (лучший способ - использовать spring event Publisher). Но это также можно сделать с помощью пользовательского обработчика без события Spring см.здесь .
2) Сделайте явный вызов для ссылки на БД для работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...