java - 如何否定多个谓词
问题描述
我有两个实体
@Entity
@Table(name = SIGNAL")
public class TradingSignal {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false, unique = true)
private int id;
@Column(name = "SIGNAL_ID")
private int signalId;
@Column(name = "TICKER", length = 6)
private String ticker;
@OneToMany(cascade = CascadeType.ALL)
private Set<TsUsed> tsUsedSet;
}
和
@Entity
@Table(name = "TS_USED")
public class TsUsed {
@Id
@Column(name = "FILTER_ID", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private int filterId;
@Column(name = "USER_ID_LSB")
private long userIdLsb;
@Column(name = "USER_ID_MSB")
private long userIdMsb;
@Column(name = "VISIBLE")
private boolean visible;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "ID", nullable = false)
private TradingSignal tradingSignal;
}
我怎样才能找到所有TradingSignal
s where TsUsed
。userIdLsb
和TsUsed
。userIdMsb
不存在于tsUsedSet
?
无法创建有效的谓词。
这段代码对我不起作用
Join<TradingSignal, TsUsed> tsUsed = getTsUsedJoin(root);
Predicate predicateUserIdLsb = builder.equal(tsUsed.get("userIdLsb"), userId.getLeastSignificantBits());
Predicate predicateUserIdMsb = builder.equal(tsUsed.get("userIdMsb"), userId.getMostSignificantBits());
Predicate predicateInvisible = builder.isFalse(tsUsed.get("visible"));
Predicate notInvisibleForUser = builder.and(predicateUserIdLsb, predicateUserIdMsb, predicateInvisible).not();
解决方案
推荐阅读
- android - 敲手机返回键时,flutter应用退出
- amcharts4 - 使雷达图的片段具有固定大小
- javascript - 如何在 WebRTC 中仅选择物理设备
- android - 带有图像的推送通知问题(Windev Mobile Android)
- python - 未应用 Jupyter Notebook 上的 matplotlib 样式表
- html - 顶部的空白 + 链接不居中
- spring-boot - 无法确定类型:org.apache.http.client.CookieStore,表:帐户,列:[org.hibernate.mapping.Column(cookie)]
- html - 在相似页面之间导航时页面内容会略微水平跳跃
- javascript - 菜单中的正则表达式覆盖了我的 jquery 切换
- android - 即使在 wrap_content 中,TextView 也不完全可见