0
次の3つのエンティティを含むTopLinkを使用してJPA問合せを作成しています。左結合のJPA問合せと「存在しません」
@Entity
@Table(name = "OFFERS")
public class Offers implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="offers_seq_gen")
@SequenceGenerator(name="offers_seq_gen", sequenceName="OFFERS_SEQ")
@Basic(optional = false)
@Column(name = "OFFERID")
private Long offerid;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "offers", fetch = FetchType.LAZY)
private List<Coupons> couponsList;
}
@Entity
@Table(name = "COUPONS")
public class Coupons implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="coupons_seq_gen")
@SequenceGenerator(name="coupons_seq_gen", sequenceName="COUPONS_SEQ")
@Basic(optional = false)
@Column(name = "COUPONID")
private Long couponid;
@Basic(optional = false)
@Column(name = "ISSUED", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
@Temporal(TemporalType.TIMESTAMP)
private Date issued;
@JoinColumn(name = "USERID", referencedColumnName = "USERID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Users users;
@JoinColumn(name = "OFFERID", referencedColumnName = "OFFERID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Offers offers;
@Entity
@Table(name = "USERS")
public class Users implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="users_seq_gen")
@SequenceGenerator(name="users_seq_gen", sequenceName="USERS_SEQ")
@Basic(optional = false)
@Column(name = "USERID")
private Long userid;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "users", fetch = FetchType.LAZY)
private List<Coupons> couponsList;
は、私はどちらかが一日以上前に発行された、指定されたユーザーのためのクーポンやユーザーのすべてのクーポンを持っていないすべてのオファーを見つける必要があります。 私は多くの異なったアプローチを試みていると展開にサーバーをクラッシュしない、私は今のところ出ている唯一のクエリは、次のとおりです。
SELECT o
FROM Offers o
LEFT JOIN o.couponsList c
WHERE
c.users.userid = :userid AND c.issued < :yesterday
OR
NOT EXISTS
(SELECT c1
FROM Coupons c1
WHERE c1.offers = o AND c1.users.userid = :userid)
しかし、クーポンのエントリが存在しない場合には、オファーを返しません。 。
ターンのSQLのログと生成されたSQLがどのように見えるかを見て、その後、あなたは何が間違って表示されます。参考のためにここでそれを残して誰もが同じような問題があった場合 –