JPA картографические интерфейсы - PullRequest
3 голосов
/ 11 ноября 2008

У меня проблемы с созданием отображения, когда тип списка является интерфейсом. Похоже, мне нужно создать абстрактный класс и использовать столбец дискриминатора, это так? Я бы предпочел не делать этого, так как абстрактный класс будет просто содержать абстрактный метод, и я бы предпочел просто оставить интерфейс.

У меня есть интерфейс, который можно назвать учетной записью

public interface Account {
 public void doStuff();
}

Теперь у меня есть два конкретных разработчика Account OverSeasAccount и OverDrawnAccount

public class OverSeasAccount implements Account {
 public void doStuff() {
   //do overseas type stuff
 }
}

И

public class OverDrawnAccount implements Account {
 public void doStuff() {
   //do overDrawn type stuff
 }
}

У меня есть класс под названием Работа со списком

private List<Account> accounts; 

Я смотрю на поля дискриминатора, но, похоже, могу сделать это только для абстрактных классов. Это тот случай? Любые указатели приветствуются. Могу ли я использовать дискриминаторы для интерфейсов?

Ответы [ 2 ]

2 голосов
/ 12 ноября 2008

Я думаю, что можно сделать интерфейс супертипом отображения. Вы не сможете использовать аннотации, хотя. Аннотации хорошо работают с файлами конфигурации xml, поэтому вам, возможно, придется добавить файл конфигурации hibernate в ваш проект с необходимыми сопоставлениями. Но вы сможете сохранить аннотации для остальной части вашего проекта.

Эта проблема обсуждает это больше. Кажется, это заканчивается предложением о том, как сделать это с аннотациями, так что, кто знает. Я хотел бы предположить, что xml все еще безопаснее. На этой странице документации объясняется необходимое отображение xml.

0 голосов
/ 11 ноября 2008

Вы также можете ввести абстрактный класс, не удаляя интерфейс.

// not an entity
public interface Account {
    public void doStuff();
}

@Entity
public abstract class BaseAccount {
    public void doStuff();
}


@Entity
public class OverSeasAccount extends AbstractAccount {
    public void doStuff() { ... }
}

@Entity
public class OverDrawnAccount extends AbstractAccount {
    public void doStuff() { ... }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...