Как сопоставить универсальные экземпляры Java с Hibernate - PullRequest
2 голосов
/ 16 августа 2011

Я пытаюсь отобразить универсальные типы в Hibernate. Я искал и не мог найти четких ответов, как это сделать. Помощь будет высоко ценится. Вот несколько примеров классов:

public class Person {
  ...
}

public class PersonA extends Person {
  ...
}
public class PersonB extends Person {
  ...
}
public class PersonHolder<P extends Person> {
  private P person;
  ...
}
public class People {
  private Map<String, PersonHolder<PersonA> > aPeople;
  private Map<String, PersonHolder<PersonB> > bPeople;
  ...
}

Я использую собственное отображение Hibernate (XML, без аннотаций). У меня уже есть отображение Hibernate для Person, PersonA и PersonB, но я хотел бы знать, возможно ли отобразить создание экземпляра класса PersonHolder универсальным способом без явного создания подклассов, реализующих универсальный тип, таких как:

public class PersonAHolder extends PersonHolder<PersonA> {
  ...
}

(и отображение этого класса как обычного класса).

Спасибо!

1 Ответ

1 голос
/ 16 августа 2011

AFAIK, что, к сожалению, невозможно.В байт-коде нет разницы между PersonHolder<PersonA> и PersonHolder<PersonB> из-за стирания типа, и поэтому Hibernate не сможет различить их.

Изменить: чтобы уточнить, я говорю о прямых случаях PersonHolder.Если у вас есть подклассы, которые определяют конкретный универсальный тип, вы можете получить информацию об универсальном типе.Но для этого нужно иметь подклассы, что противоречит вопросу:

Я хотел бы знать, возможно ли отобразить создание экземпляра класса PersonHolder универсальным способом без явного создания generic-реализации подклассов, таких как:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...