Hibernate搜索:如何索引父类的B个孩子?如何使用lucene仅获取包含一个特定对象A的B对象?

Hibernate搜索:如何索引父类的B个孩子?如何使用lucene仅获取包含一个特定对象A的B对象?,hibernate,indexing,lucene,hibernate-search,indexed,Hibernate,Indexing,Lucene,Hibernate Search,Indexed,我对lucene索引有一个问题,我在多个关联中插入了一个索引实体,但lucene没有像我预期的那样索引 @Entity @Indexed @Table(name="level") public class Level { ... @IndexedEmbedded private List<Course> courses = new ArrayList<Course>(); @ManyToMany(cascade=C

我对lucene索引有一个问题,我在多个关联中插入了一个索引实体,但lucene没有像我预期的那样索引

@Entity  
@Indexed  
@Table(name="level")  
public class Level {  

...  
     @IndexedEmbedded
     private List<Course> courses = new ArrayList<Course>();  

     @ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)  
     @JoinTable(name = "level_course", joinColumns = { @JoinColumn(name = "level_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "course_id", nullable = false, updatable = false) })  
@OrderColumn(name="corder")  
public List<Course> getCourses() {  
    return courses;  
}  
    ...  
}    

@Entity  
@Indexed  
@Table(name="course")  
@FullTextFilterDef(name = "filterLevel", impl = LuceneFilterFactory.class ,cache=FilterCacheModeType.NONE)  
public class Course {  
    ...
    @ContainedIn
private List<Level> levels = new ArrayList<Level>();  

    @ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="courses")  
public List<Level> getLevels() {  
    return levels;  
}  
}  
@实体
@索引
@表(name=“level”)
公共类级别{
...  
@指数化
私有列表课程=新的ArrayList();
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinTable(name=“level\u course”,joinColumns={@JoinColumn(name=“level\u id”,nullable=false,updateable=false)},inverseJoinColumns={@JoinColumn(name=“course\u id”,nullable=false,updateable=false)})
@OrderColumn(name=“corder”)
公共列表getCourses(){
返回课程;
}  
...  
}    
@实体
@索引
@表(name=“course”)
@FullTextFilterDef(name=“filterLevel”,impl=LuceneFilterFactory.class,cache=FilterCacheModeType.NONE)
公共课程{
...
@包含
私有列表级别=新的ArrayList();
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy=“courses”)
公共列表getLevels(){
回报水平;
}  
}  
当我这样做时: level.getCourses().add(myCourse1); entityManager.save(级别)

myCourse1(例如ID为10)将被很好地创建并附加到level(level是父类,Course是子类)。然后,对“课程”的实例进行了很好的索引,但如果我查看为课程生成的索引,我希望找到值为#10的“levels.id”。但是我没有找到它。 我需要这种指数化,因为我在课程中使用LuceneFilterFactory.class来按一个级别id过滤课程

也许我对@ContainedIn和@IndexEmbedded注释的使用不好? 或者我完全错误地做了我需要的事情

要简化:
我有两个班A和B,A和B之间有很多联系。
他是这一关系的主人。A和B被编入索引。我想使用hibernate搜索来获取B对象,这些对象在其多个关联中包含一个A对象。我不想得到所有的B,只想得到包含这个特定A的B对象

如何做到这一点


感谢您的帮助

您是否已尝试一致地放置批注?要么全部在字段上,要么全部在getter上

我在我的问题中添加了更多的解释,我希望这会有所帮助,因为我认识到我的问题不是很清楚。!!!我的回答是:“设置关系的双方都很重要。它与搜索无关,只是基本的Hibernate(JPA)行为/需求。”!!!在哪里设置双向关联的另一端(意味着在课程中更新级别列表?)。您需要更新关联的双方。如果您包括索引代码以及您试图执行的实际搜索,这也会有所帮助。我没有设置另一面,我试图通过将@IndexedEmbedded放在类课程的属性级别上来更改映射。然后我更新了协会的双方,你是对的,现在我得到了我期望的结果。但是通过设置关联的两个方面有一个重要的问题:我没有设置另一个方面,我试图通过将@IndexedEmbedded放在类课程的属性级别上来更改映射。然后我更新了协会的双方,你是对的,现在我得到了我期望的结果。但通过设置关联的双方,有一个重要问题:level.getCourses().add(myCourse1);myCourse1.getLevels().add(level);entityManager.save(级别);=>JPA将加载两个集合(level.courses和myCourse1.levels),还是我对JPA集合加载的理解有误?谢谢你的帮助。关系的双方都很重要。它与搜索无关,只是基本的Hibernate(JPA)行为/需求。