В нашем унаследованном коде я наткнулся на реализацию класса гибернации, которую я не смог полностью понять.
Существует один суперкласс, соответствующий таблице 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.
Может кто-нибудь, пожалуйста, помогитемне