我有一个标准的POJO,里面有一组属性.POJO已注释为a @Document
,以便作为Document保存在MongoDB中.
如何(注释??)可以忽略/避免POJO中的某个属性被保留?
基于Spring Data Document文档,我提供了一个存储库方法的自定义实现.自定义方法的名称是指域对象中不存在的属性:
@Document
public class User {
String username;
}
public interface UserRepositoryCustom {
public User findByNonExistentProperty(String arg);
}
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
@Override
public User findByNonExistentProperty(String arg) {
return /*perform query*/;
}
}
public interface UserRepository
extends CrudRepository<?, ?>, UserRepositoryCustom {
public User findByUsername(String username);
}
Run Code Online (Sandbox Code Playgroud)
但是,也许是因为我选择了方法名称(findByNonExistentPropertyName
),Spring Data尝试解析方法名称,并从中创建查询.当它找不到nonExistentProperty
时User
,会抛出异常.
可能的决议:
谢谢!
Spring Data和MongoDB的第一次实验非常棒.现在我有了以下结构(简化):
public class Letter {
@Id
private String id;
private List<Section> sections;
}
public class Section {
private String id;
private String content;
}
Run Code Online (Sandbox Code Playgroud)
加载和保存整个Letter对象/文档就像一个魅力.(我使用ObjectId为Section.id字段生成唯一的ID.)
Letter letter1 = mongoTemplate.findById(id, Letter.class)
mongoTemplate.insert(letter2);
mongoTemplate.save(letter3);
Run Code Online (Sandbox Code Playgroud)
由于文档很大(200K),有时应用程序只需要子部分:是否有可能查询子文档(部分),修改并保存它?我想实现一个类似的方法
Section s = findLetterSection(letterId, sectionId);
s.setText("blubb");
replaceLetterSection(letterId, sectionId, s);
Run Code Online (Sandbox Code Playgroud)
当然还有以下方法:
addLetterSection(letterId, s); // add after last section
insertLetterSection(letterId, sectionId, s); // insert before given section
deleteLetterSection(letterId, sectionId); // delete given section
Run Code Online (Sandbox Code Playgroud)
我看到最后三种方法有点"奇怪",即加载整个文档,修改集合并再次保存它可能是从面向对象的角度来看更好的方法; 但第一个用例("导航"到子文档/子对象并在此对象的范围内工作)似乎很自然.
我认为MongoDB可以更新子文档,但SpringData可以用于对象映射吗?谢谢你的任何指示.
Spring Batch是否有基于Mongo的作业存储库?如果没有,我是否需要实施JobInstanceDao
及其兄弟姐妹?是否有任何例子或现有作品可以帮助这项工作?
spring mongodb spring-batch spring-data spring-data-document
我们假设我在employees集合中的mongodb中有以下文档:
db.employees.insert({_id: ObjectId("4d85c7039ab0fd70a117d733"), name: 'Siona',
manager: [ObjectId("4d85c7039ab0fd70a117d730"), ObjectId("4d85c7039ab0fd70a117d732")] })
Run Code Online (Sandbox Code Playgroud)
在这里,'Siona'有两个经理,在经理阵列中表示.我知道Spring Data M3具有DBRefs的概念,但是monogdb文档表明DBrefs很昂贵,我们应该尽可能存储ObjectId.
我的问题是,有没有办法解决这里的objectID通过Spring Data Document api指向的文档,或者我被迫在客户端执行连接,其中:
我在最简单的化身中使用 Mongo(与 Spring Data 结合使用)。
我有两个(一级)实体(@Documents)A 和 B,其中 A 中有 B 的引用(@DBRef)。创建 A 和 B 时一切正常。但是,在读取对象 A(按 Id)时,引用 B 始终为null。
我相信默认情况下会急切地获取 DBRefs(请参阅http://static.springsource.org/spring-data/data-document/docs/current/reference/html/#mapping-usage-references),但目前的行为是反对那。任何想法为什么?