Hibernate: виртуальная колонка - PullRequest
       2

Hibernate: виртуальная колонка

0 голосов
/ 09 февраля 2011

Я ищу способ связать сущность с другой сущностью исключительно через спящий режим (без дополнительных сопоставлений столбцов БД) и не требуя отдельных вызовов DAO.Я искал решение, и единственное, что я мог найти, было @Formula, но я не мог заставить его работать.Подумайте:

@Entity
class CommonEntity {
   @MagicAnnotation("maybe with HQL?")
   private SuperEntity superEntity;
}

@Entity
class SuperEntity { }

Это означает, что иногда CommonEntity является SuperEntity, и я хочу иметь геттер на самом POJO, чтобы он имел доступ к SuperEntity через простой get(),Есть ли способ сделать это чисто так, чтобы, когда я делаю что-то вроде commonEntityDAO.get(1L);, где 1L является SuperEntity, тогда сущность будет установлена?

Таблицы в базе данных будут выглядеть так:

table common_entity ( common_entity_id int primary key, name string );
table super_entity ( super_entity_id int primary key, extra_field string, common_entity_id int );

Ответы [ 2 ]

0 голосов
/ 10 февраля 2011

Разве вы не можете просто использовать @OneToOne?Ваша схема базы данных выглядит подходящей для этого.

@Entity 
class CommonEntity {
    @OneToOne(mappedBy = "commonEntity")
    private SuperEntity superEntity;
}  

@Entity 
class SuperEntity { 
    @OneToOne
    @JoinColumn(name = "common_entity_id")
    private CommonEntity commonEntity;
}

Обратите внимание, что в этом случае вам необходимо двунаправленное отношение с SuperEntity, являющимся стороной-владельцем, поскольку оно содержит внешний ключ.

0 голосов
/ 09 февраля 2011

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

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