我对 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 对象。
这个怎么做 ?
谢谢你的帮助