Я использую Hibernate Search и ищу для индексации объект, имеющий полиморфные отношения, использующие @Any и / или @ ManyToAny.
@Indexed
public class Foo {
@Any(metaDef="fooOwnerType", metaColumn=@Column(name="ownerType"))
@JoinColumn(name="ownerId")
@IndexedEmbedded // this DOES NOT WORK
private OwnerType owner;
@OneToOne
@IndexedEmbedded // this WORKS
private User user;
@OneToOne
@IndexedEmbedded // this WORKS
private Company company;
@Field
private String description;
}
@Indexed
public class User implements OwnerType {
@Field
private String name;
@Field
private String address;
}
public class Company implements OwnerType {
@Field
private String name;
}
public interface OwnerType {
}
Я могу без проблем искать и находить объекты Foo, используя текст в поле описания. Я также хотел бы найти объекты Foo, когда совпадают User.name или User.address ... но Hibernate Search, похоже, не индексирует эти поля для меня из-за полиморфных отношений OwnerType owner.
Будет нормально работать, если я буду использовать @IndexedEmbedded на конкретном объекте (пользователь или компания) напрямую, как и ожидалось.