@ElementCollection
@CollectionTable
@MapKeyColumn(name = "SERVER_ID")
@Column(name = "IS_SYNC")
private Map<String, Boolean> serverSyncs = new HashMap<>();
这就是我现在所做的
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<T> criteriaQuery = builder.createQuery(clazz);
Root<T> root = criteriaQuery.from(clazz);
MapJoin<T, String, Boolean> mapRoot = root.joinMap("serverSyncs");
List<T> result = session.createQuery(
criteriaQuery.where(
builder.or(
mapRoot.isNull(),
builder.not(mapRoot.key().in(serverId)),
builder.and(
mapRoot.key().in(serverId),
mapRoot.value().in(false)
)
)
)
).list();
问题是我在查询时遇到了这个错误
问题是:我如何用JPA 2.0标准实现我想要的?
id | SERVER_id | IS_SYNC
1 | 000000000 1 |正确
2 | 000000000 3 |假
如果我要求SERVER_ID=3,我应该得到实体1和2
如果我要求SERVER_ID=1,我将一无所获