0

私は次のエンティティを持っています

@Entity
public class Conversation implements Serializable {

    @Id
    private int Id;

    @Column
    private Alias AliasA;

    // SNIP
}

@Entity
public class Alias implements Serializable {

    @Id
    private String alias;

    @Column
    private String personalName;

    @OneToMany(mappedBy = "alias", cascade = CascadeType.ALL)
    @MapKeyColumn(name="address")
    private Map<String, Recipient> recipients = new HashMap<String, Recipient>();
}

@Entity
public class Recipient implements Serializable {

    @Id
    @GeneratedValue
    private long id;

    @Column
    private String address;

    @Column
    private RecipientStatus status;

    @ManyToOne
    private Alias alias;
}

そして、次のJPQLクエリのようなものを作成したいと思います

SELECT conversation FROM Conversation conversation WHERE :sender MEMBER OF conversation.aliasA.recipients AND conversation.adId=:adID

:sender私の地図の鍵はどこにありますか。ただし、MEMBER OFキーワードはセットでのみ機能し、マップでは機能しないようです。JPA 2.0がKEYキーワードを提供するはずだと思いますが、これはまだOpenJPAに実装されていないようです。これに代わるものはありますか?

更新:私の質問を明確にするための情報を追加しました。

4

2 に答える 2

1

VALUE次のようなことを可能にするキーワードがあります。

SELECT c FROM Conversation c JOIN c.aliasA a JOIN a.recepients r 
WHERE VALUE(r) = :sender AND conversation.adId=:adID
于 2012-04-18T11:41:48.297 に答える
0

axtavtの答えは私に必要なヒントを与えてくれましたが、答えは実際には、この場合、IntelliJ10.5.4のエラーチェックは信頼されるべきではないということでした。

KEYキーワードは実際に機能し、正しいクエリは

SELECT conversation FROM Conversation conversation JOIN conversation.aliasA.recipients recipients WHERE KEY(recipients) = :senderAddress AND conversation.adId=:adID
于 2012-04-27T15:27:09.917 に答える