java - 在 OpenJPA 中使用 map 查询实体

标签 java jpa jpql openjpa

我有以下实体

@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 位于我的 map 的键中。然而,MEMBER OF 关键字似乎仅适用于集合,不适用于 map 。我相信 JPA 2.0 应该提供 KEY 关键字,但这似乎还没有在 OpenJPA 中实现。有替代方案吗?

更新:添加信息以澄清我的问题。

最佳答案

有一个 VALUE 关键字应该允许您执行如下操作:

SELECT c FROM Conversation c JOIN c.aliasA a JOIN a.recepients r 
WHERE VALUE(r) = :sender AND conversation.adId=:adID

关于java - 在 OpenJPA 中使用 map 查询实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10208352/

相关文章:

java - JPA : Join and group by sum. MySQL查询

java - JPA - 禁用 persistence.xml 的验证

java - 昆德拉使用 getResultList() 方法时抛出空指针异常

java - 在 JPQL 中选择 nvl(max(c.EmployeeId),0)?

java - 函数抛出异常时,其返回类型可以是Exception

java - Android studio 中的入职屏幕

java - 为什么我的 JPQL 不工作?

java - 使用 ORDER BY 查询对端点中的值进行排序

java - JFrame 中不需要的 JPanel 边框

java - 如何确定哪个 Listview 或 Adapter 正在使用 OnClick 方法。安卓