Поиск в спящем режиме: как индексировать дочерних элементов класса B родительского класса?Как получить только объекты B, которые содержат один конкретный объект A, используя lucene? - PullRequest
0 голосов
/ 26 апреля 2011

У меня проблема с индексацией 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 (level);

myCourse1 (например, с ID # 10) будет хорошо создан и привязан к уровню (уровень - родительский класс, курс - дочерний).Тогда экземпляры «Course» хорошо индексируются, но если я посмотрю на индексы, сгенерированные для Course, я ожидал найти «levels.id» со значением # 10.Но я не нахожу это.Мне нужна такая индексация, потому что я использую LuceneFilterFactory.class на курсе, чтобы отфильтровать курс по одному уровню ID.

Может быть, мое использование аннотаций @ContainedIn и @IndexEmbedded не подходит?Или, может быть, я совершенно не в том направлении, чтобы делать то, что мне нужно.

Для упрощения:
У меня есть 2 класса A и B, с ассоциацией manyToMany между A и B.
A - этомастер по отношению.А и В индексируются.Я хотел бы использовать поиск в спящем режиме для получения объектов B, содержащих один объект A в их ассоциации manyToMany.Я не хочу получать все объекты B, а только объекты B, содержащие этот конкретный A.

Как это сделать?

Спасибо за помощь

1 Ответ

0 голосов
/ 27 апреля 2011

Вы пытались размещать аннотации последовательно? Или все на полях или все на добытчиках?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...