У нас есть ситуация, когда нам нужно связать разные объекты под одним атрибутом и использовать этот атрибут в запросе.Проект использует JPA с EclipseLink в качестве реализации.
Пример кода для иллюстрации: (реальная проблема намного сложнее)
interface I1 {
public int getData();
}
@Entity
class E1 implements I1 {
public int id;
public String someData;
public int getData() { return someData; }
}
@Entity
class E2 implements I1 {
public int id;
public String someOtherData;
public int getData() { return someOtherData; }
}
@Entity
class Test {
// we want to handle this as if it was a real entity using the I1 Interface
// Since it is a oneToMany mapping we cannot use eclipselinks
// VariableOneToOne mapping
// something like this should be possible
// SELECT t.refToEntities From Test t where t.data == 'Some String'
public List<I1> refToEntities;
}
По историческим причинам объекты не имеют отношения наследования, но имеют общие данные, которыеабстрагируется под общим интерфейсом.Сейчас мы сталкиваемся с проблемой, что у нас есть другая сущность, которая хочет связать эти сущности, используя общий интерфейс в отношениях один ко многим.В идеале отношение должно быть запрашиваемым с использованием JPQL, но с использованием специальных методов EclipseLink также хорошо.
Подводя итог, мы хотим иметь VariableOneToOne Отображение для отношения OneToMany .
Документация, которую я нашел до сих пор, указывает, что можно создать RelationalDescriptor для интерфейсов, но неясно, как передать этот дескриптор в сеанс в JPA Сценарий и как настроить InterfacePolicy , чтобы использовать интерфейс в качестве общего типа для базовых объектов.
ТАК кто-нибудь знает, как это сделать, или может указать нам рабочий код?