Ответ 1
@MappedSuperclass
public class StoreBase
Подробнее см. docs.
У меня есть 4 постоянных класса, все из которых имеют одинаковые поля (точно), только 3 различия между ними: 1) имя класса, 2) имя таблицы и 3) данные. я знаю, что это может показаться странным для некоторых, но поверьте мне, есть веская причина, по которой я не буду вдаваться здесь.
теперь, я использую аннотации hibernate для настройки моего класса, который должен работать следующим образом:
@Entity
@Table(name = "store")
public class Store
{
@Id
@Column(name = "unique_id")
protected String id;
@Column
protected String category;
...
}
.. и это работает для одного автономного класса, однако есть много полей для отображения, и я хотел бы сделать все это одним ударом для всех четырех подобных классов, то есть:
public class StoreBase
{
@Id
@Column(name = "unique_id")
protected String id;
@Column
protected String category;
...
}
@Entity
@Table(name = "store1")
public class Store1 extends StoreBase
{}
@Entity
@Table(name = "store2")
public class Store2 extends StoreBase
{}
@Entity
@Table(name = "store3")
public class Store3 extends StoreBase
{}
@Entity
@Table(name = "store4")
public class Store4 extends StoreBase
{}
однако при попытке этого я получаю следующее исключение:
Caused by: org.hibernate.AnnotationException: No identifier specified for entity: package.entities.Store1
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:672)
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:546)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:291)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
Я предполагаю, что это потому, что суперкласс не ищет идентификатор?
Есть ли способ использовать наследование в этом контексте?
спасибо, paul.
@MappedSuperclass
public class StoreBase
Подробнее см. docs.
Посмотрите @MappedSuperclass.