Как использовать универсальный параметр типа с Hibernate 5?
Ниже приведено определение класса
интерфейс
public interface myInterface{
void myMethod1();
}
MyClass1 Class, который реализует интерфейс выше
@Entity
public class MyClass1 implements MyInterface{
@Id
private int id;
private String field1;
private String field2;
// Getter and setter
}
MyClass2 Class, который реализует интерфейс выше
@Entity
public class MyClass2 implements MyInterface{
@Id
private int id;
private String field3;
private String field4;
// Getter and setter
}
И, наконец, класс сущности, у которого есть список с параметром типа.
@Entity
public class MyClass{
@Id
priviate int id;
private String field5;
private String field6;
private List<? extends MyInterface> mylist;
//getter and setter
}
Сгенерированный класс, на который я смотрю, будет выглядеть примерно так:
MyClass Table
-------------------------
id | field5 | field6
-------------------------
1 | abc | def
2 | abc | def
3 | abc | def
MyClass1 Table
-------------------------
id | field1 | field2 | myclass_fk
-------------------------
1 | abc | def | 2
2 | abc | def | 2
3 | abc | def | 1
MyClass2 Table
-------------------------
id | field3 | field4 | myclass_fk
-------------------------
1 | abc | def | 3
2 | abc | def | 1
3 | abc | def | 1
Я пытался использовать @OneToMany
в списке с targetType для MyInterface, но это не удалось с ошибкой не класс сущности.
РЕДАКТИРОВАТЬ
Может ли это быть достигнуто с помощью Hibernate OGM, предпочтительно с использованием графика или Mongo (документа)?
2 ответа
Я мог бы добиться этого с помощью аннотации @ManyToAny, хотя мне нужно было изменить бит класса.
Проблема в том, что Hibernate не знает, из какой таблицы загружать "mylist" при загрузке MyClass. Посмотрите на https://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/chapters/domain/inheritance.html.