Я хочу использовать @Embedded для метода доступа, который возвращает тип интерфейса, а не фактический impl, но, похоже, JPA этого не поддерживает.
Получил несколько указателей при поиске, что я должен использовать абстрактные классы, но не мог понять, как это работает.
Пример
interface IEmail{
String getLocalPart();
String getDomainPart();
String getEmailAddress();
}
class Email implements IEmail{
@Transient
String getLocalPart(){}
@Transient
String getDomainPart(){}
@Column(..)
String getEmailAddress(){}
}
interface IUser{
IEmail getEmail();
}
class User implements IUser{
@Embedded
IEmail getEmail(){}
}
Я бы не хотел использовать абстрактные классы, так как интерфейсы находятся в отдельном проекте (который не зависит от jar-файла JPA), а impl находятся в отдельном проекте, поэтому, если я определяю Email как абстрактный класс в проекте интерфейса, я не могу использовать JPA аннотации.
Пожалуйста, помогите.
p.s. а. я не использую Hibernate Impl, поэтому не могу использовать @Target для решения этой проблемы
б. Я использую это в платформе AppEngine
с. Я еще не пробовал это в своем приложении, но я знаю, что он не будет работать, так как раньше я получил ошибку при работе с Hibernate и решил ее с помощью аннотации @Target
@ becomputer06
Спасибо за подробный ответ.
К сожалению, AppEngine поддерживает только JPA 1.0 (см. здесь )
Так что я боюсь, что не могу использовать аннотацию @Access.
@ Bozho, как уже упоминалось, я просто хочу встроить класс в другой, но с указанием типов интерфейса. Пожалуйста, спросите больше, если это необходимо.
@ Datanucleus да, я видел ваши комментарии в других постах. я понимаю, но по каким-то причинам мы обосновались в JPA (по крайней мере, мы немного знакомы с этим - раньше мы работали над JPA + Hibernate)
Есть другие указатели? Еще раз спасибо