Разъяснение аннотации Hibernate Inheritance - PullRequest
2 голосов
/ 11 ноября 2010

В нашем унаследованном коде я наткнулся на реализацию класса гибернации, которую я не смог полностью понять.

Существует один суперкласс, соответствующий таблице WORK_REQUEST_GROUPS -

@Entity  
@Table(name="WORK_REQUEST_GROUPS")  
@Inheritance(strategy=InheritanceType.JOINED)  
public class CCSRequestGroup
{  
    @Id  
    @GeneratedValue(strategy=GenerationType.AUTO)  
    @Column(name="REQUEST_GROUP_ID")  
    private Long groupId;
    ....
}

Тогдау нас есть подкласс, соответствующий таблице RELEASE_CANDIDATES -

@Entity
@Table(name="RELEASE_CANDIDATES")
@PrimaryKeyJoinColumn(name="RELEASE_CANDIDATE_ID")
public class CCSReleaseCandidate extends CCSRequestGroup {

@ManyToOne
@JoinColumn(name="GROUP_CONDITION_CODE")
private CCSRequestGroupCondition condition;
....
}

, который, согласно моему пониманию, утверждает, что CCSReleaseCandidates является подклассом CCSRequestGroup и объединяется в столбце RELEASE_CANDIDATES_ID.

Теперь у нас естьметод, в котором мы пытаемся найти экземпляры CCSRequestGroup с некоторыми критериями -

List<CCSRequestGroup> requests = session.createQuery("from CCSRequestGroup requestGroup where requestGroup.condition = \'AwaitingStartTime\' order by RAND()").list();

, который, вероятно, пытается найти все группы CCSRequestGroup в текущем сеансе Hibernate, которые имеют свое условие = 'AwaitingStartTime'.

Что здесь съедает мой мозг, так это то, что «условие» является членом CCSReleaseCandidates, а не CCSRequestGroup, тогда как мы можем успешно получить член условия экземпляра CCSRequestGroup.

Может кто-нибудь, пожалуйста, помогитемне

1 Ответ

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

Я полагаю, если вы включите ведение журнала SQL, вы увидите, что то, что вы считаете простым заявлением, на самом деле выполняет внешнее соединение с таблицами подклассов за кулисами.Вот почему данные доступны для Hibernate, а сам HQL, вероятно, использует неявный полиморфизм, чтобы вернуть вам правильные результаты.

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