0

我对 lucene 索引有问题,我在 manyToMany 关联中插入了一个索引实体,但 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;  
}  
}  

当我这样做时: level.getCourses().add(myCourse1); entityManager.save(级别);

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

也许我对@ContainedIn 和@IndexEmbedded 注释的使用不好?或者,也许我完全以错误的方式去做我需要的事情。

为了简化:
我有 2 个类 A 和 B,A 和 B 之间有一个 manyToMany 关联
。A 是关系的主人。A 和 B 已编入索引。我想使用休眠搜索来获取在其 manyToMany 关联中包含一个 A 对象的 B 对象。我不想获取所有 B,而只想获取包含此特定 A 的 B 对象。

这个怎么做 ?

谢谢你的帮助

4

1 回答 1

0

您是否尝试过一致地放置注释?要么全部在字段上,要么全部在吸气剂上?

于 2011-04-27T06:17:16.003 回答