Как опровергнуть несколько предикатов - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть две сущности

@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, где 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();
...