首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类似于OneToOne连接的JPA条件

类似于OneToOne连接的JPA条件
EN

Stack Overflow用户
提问于 2019-06-20 17:38:10
回答 1查看 103关注 0票数 0

我需要搜索包含字符串参数的数据

我有两个实体:

代码语言:javascript
复制
@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;

代码语言:javascript
复制
@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标准的seach API。它可以很好地处理不同的字段和连接(ManyToOne),但在这种情况下,我需要找到Referentie1,它包含referentielDigital.descriptionLongue中的字符串。

我试试这个:

代码语言:javascript
复制
        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));

它不工作,因为请求包含“在”,我想有“喜欢”,以获得良好的结果。

对于扩展对象,我没有"like“方法。

我怎样才能用这个join做liek请求?

EN

回答 1

Stack Overflow用户

发布于 2019-06-20 17:50:20

我通过JB Nizet Help找到了解决方案:

代码语言:javascript
复制
        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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56683103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档