次のクラス モデルを想定します: (メモリから記述)
@Entity
@Table(name="BULLETIN_MESSAGE")
public class BulletinMessage {
@OneToMany
@JoinColumn(name="BULLETIN_ID")
private List<MeteoMessage> messages;
}
@MappedSuperclass
public abstract class MeteoMessage {
private String firLocation;
}
@Entity
@Table(name="METAR_MESSAGE")
@PrimaryKeyJoinColumn(name="metar_id")
public class MetarMessage extends MeteoMessage {
}
@Entity
@Table(name="AIRMET_MESSAGE")
@PrimaryKeyJoinColumn(name="airmet_id")
public class AirmetMessage extends MeteoMessage {
}
特定の firLocation からのすべての AftnMessages を MetarMessages と結合したいと考えています。しかし、私が書き込もうとすると:
Criteria criteria = session.createCriteria(BulletinMessage.class, "bulletin").createAlias("messages", "meteo", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eq("meteo.firLocation", "EPWA"));
次のSQLを取得します。
select ... from BULLETIN_MESSAGE b
LEFT OUTER JOIN AIRMET_MESSAGE a on ....
LEFT OUTER JOIN METAR_MESSAGE m on ...
WHERE a.firLocation = ?
休止状態が AIRMET_MESSAGE in 'where' 式を選択したことに注意してください。休止状態に 'where' 式で METAR_MESSAGE を選択させる方法:
WHERE m.firLocation = ?