Аннотирование наследуемых свойств для сохранения
-
03-07-2019 - |
Вопрос
Предполагая, что у меня есть класс A следующим образом:
class A{
int id;
int getId(){};
void setId(int id){};
}
И класс B выглядит следующим образом:
@Entity
@Table(name="B")
class B extends A{
string name;
@Column(length=20)
string getName(){}
void setName(){}
}
Как я могу аннотировать унаследованное поле id из A, чтобы Hibernate / JPA знал, что это Id для субъекта? Я попытался просто поместить @Id на поле в A, но это не сработало. я попытался сделать A сущностью, и это тоже не сработало.
Решение
Предполагая, что вы не хотите, чтобы сам суперкласс представлял сущность, вы можете использовать @MappedSuperclass
в суперклассе, чтобы подклассы наследовали свойства для сохранения:
@MappedSuperclass
class A{
int id;
@Id
int getId(){};
void setId(int id){};
}
Попробуйте сделать абстрактный суперкласс. См. этот раздел документа для получения дополнительной информации. р>
Другие советы
Существует несколько стратегий, которые вы можете использовать. Вот что вы можете попробовать:
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
class A{
int id;
@Id @GeneratedValue
int getId(){};
void setId(int id){};
}
@Entity
@Table(name="B")
class B extends A{
string name;
@Column(length=20)
string getName(){}
void setName(){}
}