Как ссылаться на GridFSFile с аннотацией @DbRef (весенние данные mongodb)
У меня есть весна @Document object Profile
я хотел бы сослаться на GridFSFile, как это:
@DbRef
private GridFSFile file;
файл записывается в другую коллекцию типа GridFS.
У меня всегда есть java.lang.StackruError
когда я установлю profile.setFile(file);
java.lang.StackruError
at org.springframework.util.ObjectUtils.nullSafeHashCode(ObjectUtils.java:336)
at org.springframework.data.util.TypeDiscoverer.hashCode(TypeDiscoverer.java:365)
at org.springframework.data.util.ClassTypeInformation.hashCode(ClassTypeInformation.java:39)
at org.springframework.util.ObjectUtils.nullSafeHashCode(ObjectUtils.java:336)
at org.springframework.data.util.ParentTypeAwareTypeInformation.hashCode(ParentTypeAwareTypeInformation.java:79)
at org.springframework.util.ObjectUtils.nullSafeHashCode(ObjectUtils.java:336)
Я не понимаю, если кто-то с идеей ссылаться на файл мне интересен
Спасибо ксавье
1 ответ
Я хотел что-то подобное, и не нашел пути, поэтому я сделал этот обходной путь.
В своем классе @Document поместите ObjectId
поле
@Document
public class MyDocument {
//...
private ObjectId file;
}
Затем в своем репозитории добавьте пользовательский метод для привязки файла к этому MyDocument, следуя советам Оливера Гирке и используя GridFsTemplate
:
public class MyDocumentRepositoryImpl implements MyDocumentRepositoryCustom {
public static final String MONGO_ID = "_id";
@Autowired
GridFsTemplate gridFsTemplate;
@Override
public void linkFileToMyDoc(MyDocument myDocument, InputStream stream, String fileName) {
GridFSFile fsFile = gridFsTemplate.store(stream, fileName);
myDocument.setFile( (ObjectId) fsFile.getId());
}
@Override
public void unLinkFileToMyDoc(MyDocument myDocument)
{
ObjectId objectId = myDocument.getFile();
if (null != objectId) {
gridFsTemplate.delete( Query.query(Criteria.where(MONGO_ID).is(objectId)) );
myDocument.setFile(null);
}
}
}
Кстати, вам нужно будет объявить свой GridFsTemplate
в вашем JavaConf для автоматического подключения
@Bean
public GridFsTemplate gridFsTemplate() throws Exception {
return new GridFsTemplate(mongoDbFactory(), mappingMongoConverter());
}