2011-07-29 60 views
2

我很难在我的应用程序中加入此查询。我有两个班,EncounterCheckedEncounterCheckedEncounter是我用来管理已经处理的Encounters的临时模型。它看起来像这样:用JPA加入查询?

@Entity 
public class CheckedEncounters extends GenericModel { 

    @Id 
    @GeneratedValue 
    @Column(name="ce_id") 
    public int id; 

    @Column(name="ce_encounter") 
    @OneToOne 
    public Encounter encounter; 

    @Column(name="ce_synced") 
    public boolean synchronised; 

} 

我想要做的是选择每一次相遇,这是为特定用户创建并没有CheckedEncounters记录,但(不能内CheckedEncounters TABEL发现所以只有的那些)

这一行,我选择我的遭遇对我的特定用户:

List<Encounter> encounterRequess = Encounter.find("byTargetUser", myuser).fetch(); 

编辑:

public static List<Encounter> getNewEncountersByTargetUser(User targetUser){ 
    return Encounter.find("from Encounter as enc " + 
      "where not exists (" + 
      "from CheckedEncounter as cenc " + 
      "where cenc.encounter = enc)" + 
      "and enc.targetUser = ?", targetUser).fetch(); 
} 

我建议的查询马克尝试过,但它给我一个错误:

Execution exception 
IllegalArgumentException occured : org.hibernate.hql.ast.QuerySyntaxException: CheckedEncounter is not mapped [from models.Encounter as enc where not exists (from CheckedEncounter as cenc where cenc.encounter = enc)and enc.targetUser = ?] 

回答

3

尝试

from Encounter as enc 
where not exists (
    from CheckedEncounter as cenc 
    where cenc.encounter = enc 
) 

here

+0

这又回到了Encounter列表?来自Encounter的 – networkprofile

+0

返回Encounter列表。这是具有附加条件的普通查询,因此可以用作例如一个命名查询(然后你可以添加'AND enc.user =:user'左右)或者直接由EntityManager执行。 – marc

+0

所以我应该有'List encounterrequess = from Encounter as enc ...'? – networkprofile