Hibernate отображает интерфейс как сущность с несколькими реализациями - PullRequest
0 голосов
/ 15 марта 2011

У меня есть следующая структура, которую я хотел бы отобразить в спящем режиме.

class User implements iUser
class VIPUser implements iUser

class preference
   public var user:iUser;

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

Пользователь и VIPUser являются двумя отдельными объектами, которые хранятся в разных таблицах.

Возможно ли это отображение в спящем режиме, и есть ли у кого-нибудь пример того, как его построить?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 30 октября 2013

немного поздно для вечеринки, но отображение @Any / <any> это поддерживает

@Any(metaColumn = @Column(name = "USER_TYPE"))
@AnyMetaDef(idType = "long", metaType = "string", 
    metaValues = { 
         @MetaValue(targetEntity = User.class, value = "user"),
         @MetaValue(targetEntity = VIPUser.class, value = "vip"),
    })
@JoinColumn(name="USER_ID")
private IUser user;

или хбм

<any name="user" meta-type="string" id-type="long">
    <meta-value value="user" class="User"/>
    <meta-value value="vip" class="VIPUser"/>
    <column name="USER_TYPE"/>
    <column name="USER_ID"/>
</any>
1 голос
/ 15 марта 2011

Логично, я полагаю, что VIPUser будет расширяться User. В этом случае вы можете отобразить «корневую» сущность (User) и сообщить Hibernate, какую стратегию наследования вы хотите использовать. В этом случае, я полагаю, это будет «Таблица на конкретный класс».

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