0

假设以下类模型:(从内存中写入)

@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:

在哪里 m.firLocation = ?

4

1 回答 1

1

MeteoMessage必须是一个实体,因此用 注释@Entity,而不是用注释@MappedSuperclass,以便能够创建到它的关联。

然后你应该可以使用

criteria.add(Restrictions.eq("meteo.class", MetarMessage.class));
于 2013-05-17T08:44:57.033 回答