gpt4 book ai didi

java - 如何使用@DbRef 注释引用 GridFSFile (spring data mongodb)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:27 24 4
gpt4 key购买 nike

我有一个 spring @Document object Profile

我想像这样引用 GridFSFile :

@DbRef
private GridFSFile file;

文件被写入另一个集合类型 GridFS。

当我设置 profile.setFile(file); 时,我总是有一个 java.lang.StackOverflowError

java.lang.StackOverflowError
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)

我不明白,如果有人有想法引用我感兴趣的文件

谢谢,泽维尔

最佳答案

我想要类似的东西,但没有找到方法,所以我做了这个解决方法。

在您的@Document 类中,放置一个ObjectId 字段

@Document
public class MyDocument {
//...
private ObjectId file;
}

然后在您的存储库中,添加自定义方法以将文件链接到此 MyDocument,遵循 advices from Oliver Gierke并使用 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);
}
}
}

顺便说一句,您需要在 JavaConf 中声明您的 GridFsTemplate 以 Autowiring 它

@Bean
public GridFsTemplate gridFsTemplate() throws Exception {
return new GridFsTemplate(mongoDbFactory(), mappingMongoConverter());
}

关于java - 如何使用@DbRef 注释引用 GridFSFile (spring data mongodb),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9165117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com