Я борюсь с каскадными операциями 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.Но я думаю, что есть другие решения с некоторыми каскадными аннотациями.Любая идея, пожалуйста.