我有以下两个文件:
@Document(collection = "projects")
public class Project {
@Id
private String id;
private String name;
@Indexed(unique = true)
private String slug;
private List<Component> components;
private List<Feature> features;
private List<Text> texts;
// constructors, getters and setters omitted
}
和
public class Text {
private String key;
private String defaultText;
private String comment;
private String featureUsing;
private List<String> componentsUsing;
// constructors, getters and setters omitted
}
基本上我在项目中有一系列文本。
目前这是我唯一的文件:
{
"_class": "org.aribeiro.i18n.entities.Project",
"_id": "5a64b8b65aa0334ada6eced6",
"components": [
{
"name": "Find and Ring portal",
"slug": "find-and-ring-portal"
}
],
"features": [
{
"name": "Find and Ring",
"slug": "find-and-ring"
}
],
"name": "Project 2",
"slug": "project-2",
"texts": [
{
"comment": "This is to show the title",
"componentsUsing": [
"find-and-ring-portal"
],
"defaultText": "Find and Ring",
"featureUsing": "find-and-ring",
"key": "findringportal.title"
}
]
}
我想只获得与以下过滤器匹配的文本部分:
{'texts.key': 'findringportal.title' }
所以我在我的TextsRepository中配置了这个查询:
@Query(value = "{'texts.key': ?0 }", fields = "{ 'texts.key' : 1, 'texts.defaultText': 1 }")
Text findByKey(String key);
TextsRepository是:
public interface TextsRepository extends MongoRepository<Text, String> {
@Query(value = "{'texts.key': ?0 }", fields = "{ 'texts.key' : 1, 'texts.defaultText': 1 }")
Text findByKey(String key);
}
问题是,在执行该查询时,我得到一个null。获取某些数据的唯一方法是使其返回Project
实例,并仅返回定义的字段。但是,有没有办法让它成为嵌套实体的编组?
答案 0 :(得分:1)
几点意见
问题是,在执行该查询时,我得到一个null。 - &gt;当然,您将获得null,因为您的存储库是public class DirectionExample {
public enum Direction {
EAST, WEST, NORTH, SOUTH;
}
public Direction validateDirection(final String direction) throws IllegalArgumentException {
return Direction.valueOf(direction);
}
public static void main(String[] args) {
try {
DirectionExample example = new DirectionExample();
System.out.println(example.validateDirection("EAST").name());
// Get ready to catch Error: java.lang.IllegalArgumentException:
// No enum constant DirectionExample.Direction.east
System.out.println(example.validateDirection("east").name());
} catch (IllegalArgumentException iae) {
System.err.println(iae);
} finally {
System.out.println("Fixed Return Type using enum");
}
}
}
,它将在数据库中查找无法找到的名为TextsRepository
的集合。
您在数据库中只有texts
个集合
projects
您的查询是正确的,但您应该针对ProjectRepository执行此操作。
@Document(collection = "projects")
查询方法的返回类型应该可以分配给托管域类型(在您的案例中为Project)。