【问题标题】:Join query with JPA?使用 JPA 加入查询?
【发布时间】:2011-10-16 00:25:00
【问题描述】:

我在我的应用程序中处理这个联接查询时遇到了困难。我有两个班级,EncounterCheckedEncounterCheckedEncounter 是我用来管理已处理的Encounters 的临时模型。它看起来像这样:

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

}

我想要做的是选择每个 Encounter,它是为特定用户创建的并且还没有 CheckedEncounters 记录(所以只有在 CheckedEncounters 表中找不到的那些)

通过这一行,我正在为我的特定用户选择我的所有遭遇:

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();
}

我使用建议的查询 marc 进行了尝试,但它给了我一个错误:

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 = ?]

【问题讨论】:

    标签: java sql jpa join playframework


    【解决方案1】:

    试试

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

    here

    【讨论】:

    • 这会在哪里返回 Encounter 列表?
    • from Encounter 返回遭遇列表。这是一个带有附加条件的普通查询,因此可以用作例如命名查询(然后您可以添加AND enc.user = :user 左右)或直接由EntityManager 执行。
    • 那么我应该有类似List&lt;Encounter&gt; encounterRequess = from Encounter as enc... 的东西吗?
    • 哦,这只是一个 SQL 查询!出于某种原因,我认为这是Java。谢谢!
    • 不完全是,它是HQL/JPA-QL,看起来和SQL很像。
    猜你喜欢
    • 2016-04-24
    • 2021-08-15
    • 2016-01-29
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 2017-11-16
    相关资源
    最近更新 更多