Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring数据-mongoDB-为什么要创建多个对象?_Java_Spring Data Jpa_Spring Mongodb - Fatal编程技术网

Java spring数据-mongoDB-为什么要创建多个对象?

Java spring数据-mongoDB-为什么要创建多个对象?,java,spring-data-jpa,spring-mongodb,Java,Spring Data Jpa,Spring Mongodb,我有如下代码: public Foo add(String firebaseId) { Foo foo = fooRepository.findByFirebase(firebaseId); if (foo == null) { foo = new Foo(); } foo.setFirebaseId(firebaseId); return fooRepository.save(foo); } public interface Users

我有如下代码:

public Foo add(String firebaseId) {
    Foo foo = fooRepository.findByFirebase(firebaseId);
    if (foo == null) {
        foo = new Foo();
    }
    foo.setFirebaseId(firebaseId);
    return fooRepository.save(foo);
}

public interface UsersPlayersRepository extends MongoRepository<Foo, ObjectId> {

    Foo findByFirebaseId(String firebaseId);
}

@Document(collection = "foo")
public class Foo {

    public Foo() {}

    @Id
    @JsonIgnore
    private ObjectId id;

    @JsonProperty
    private String firebaseId;
....
public Foo-add(字符串firebaseId){
Foo-Foo=foorrepository.findByFirebase(firebaseId);
if(foo==null){
foo=新的foo();
}
foo.setFirebaseId(firebaseId);
返回foosrepository.save(foo);
}
公共接口UsersPlayersRepository扩展了MongoRepository{
Foo findByFirebaseId(字符串firebaseId);
}
@文件(collection=“foo”)
公开课Foo{
公共Foo(){}
@身份证
@杰索尼奥雷
私有ObjectId;
@JsonProperty
私有字符串firebaseId;
....
但我后来在日志中看到检索错误:

错误]2019-12-27 01:15:07.985[http-nio-9000-exec-408][dispatcherServlet]-Servlet 路径为[]的上下文中servlet[dispatcherServlet]的.service()引发异常[Re] 任务处理失败;嵌套异常为org.springframework.dao.IncorrectResultSi zeDataAccessException:查询{“$java”:查询:{“firebaseId”:“3OdjeUiCkOeKzH1ETvGL” HjH0xLv1“},字段:{},排序:{}返回了非唯一结果。]带有根本原因


我想确保只存储唯一的firebase项?我的构造中是否有错误?

也发布实体和存储库详细信息。如错误响应中所述,对于给定的firebaseId,您在
fooRepository
中有多条记录。请确保firebase id是唯一的,或者将结果存储在列表中实体是什么's ID?如果它是ObjectId属性,并且标记为JsonIgnore,您可能没有从数据库中检索ID,当您插入它时,它将作为一个新的ID插入,这将导致重复。不管怎样,我都不明白如果从数据库检索实体,再次保存该实体有什么意义,因为y分配的属性是firebaseId,这是搜索的第一个条件。您在这一行中有一个输入错误Foo Foo=fooRepository.findByFirebase(firebaseId);它应该是Foo Foo=fooRepository.findByFirebaseId(firebaseId);