[英]JPA criteria like with OneToOne join
我需要搜索包含字符串參數的數據
我有2個實體:
@Entity
@Table(name = "referentiel_digital")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class ReferentielDigital implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Size(max = 200)
@Column(name = "libelle_commercial", length = 200, nullable = false)
private String libelleCommercial;
@Size(max = 1000)
@Column(name = "description_courte", length = 1000)
private String descriptionCourte;
@Size(max = 1000)
@Column(name = "description_longue", length = 1000)
private String descriptionLongue;
@OneToOne
@JoinColumn(unique = true)
private Referentiel reference;
和
@Entity
@Table(name = "referentiel")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Referentiel implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = "uuid", nullable = false)
private UUID uuid;
....
@OneToOne(mappedBy = "reference")
@JsonIgnoreProperties("referentiels")
private ReferentielDigital digital;
我開發了一個使用JPA Criteria的seach API。 它適用於不同的領域,並加入(ManyToOne),但在這種情況下,我需要找到Referentiel,它在例如referentielDigital.descriptionLongue中包含字符串。
我試試這個:
Join<Referentiel, ReferentielDigital> digital = root.join("digital");
Expression<String> exp1 = digital.get("libelleCommercial");
Predicate p1 = exp1.in("%" + criteria.getLibelle() + "%");
Expression<String> exp2 = digital.get("descriptionCourte");
Predicate p2 = exp1.in("%" + criteria.getLibelle() + "%");
Expression<String> exp3 = digital.get("descriptionLongue");
Predicate p3 = exp1.in("%" + criteria.getLibelle() + "%");
predicates.add(cb.or(p1, p2, p3));
它不起作用,因為請求包含“in”,並且我想要“喜歡”以獲得好的結果。
使用Extension對象,我沒有“喜歡”的方法。
請問如何通過此次加入請求謊言請求?
我在JB Nizet幫助中找到了解決方案:
Join<Referentiel, ReferentielDigital> digital = root.join("digital");
Expression<String> exp1 = digital.get("libelleCommercial");
Predicate p1 = cb.like(exp1, "%" + criteria.getLibelle() + "%");
Expression<String> exp2 = digital.get("descriptionCourte");
Predicate p2 = cb.like(exp2, "%" + criteria.getLibelle() + "%");
Expression<String> exp3 = digital.get("descriptionLongue");
Predicate p3 = cb.like(exp3, "%" + criteria.getLibelle() + "%");
predicates.add(cb.or(p1, p2, p3));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.