Аннотирование наследуемых свойств для сохранения

StackOverflow https://stackoverflow.com/questions/418197

Вопрос

Предполагая, что у меня есть класс 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(){}
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top