Аннотирование наследуемых свойств для сохранения - PullRequest
4 голосов
/ 07 января 2009

Предполагая, что у меня есть класс 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(){}
}

Как я могу аннотировать унаследованное поле идентификатора от A, чтобы Hibernate / JPA знал, что это Id для субъекта? Я попытался просто поместить @Id на поле в A, но это не сработало. я попытался сделать A сущностью, и это тоже не сработало.

Ответы [ 2 ]

10 голосов
/ 07 января 2009

Если вы не хотите, чтобы сам суперкласс представлял сущность, вы можете использовать @MappedSuperclass в суперклассе, чтобы подклассы наследовали свойства для сохранения:

@MappedSuperclass
class A{
   int id;
   @Id
   int getId(){};
   void setId(int id){};
}

Подумайте над тем, чтобы сделать суперкласс абстрактным. См. этот раздел документа для получения более подробной информации.

1 голос
/ 07 января 2009

Существует несколько стратегий, которые вы можете использовать. Вот что вы можете попробовать:

@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(){}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...