当前位置: 首页 > 面试题库 >

Hibernate Criteria API-添加条件:字符串应在集合中

公孙涵育
2023-03-14
问题内容

我必须跟随实体对象

@Entity
public class Foobar {
    ...
    private List<String> uuids;
    ...
}

现在,我想进行一个标准查询,以获取其uuid列表中包含字符串“ abc123”的所有Foobar pojos,我不确定如何制定适当的标准。


问题答案:

我假设您使用的是实现JPA 2.0的Hibernate版本。这是一个JPA 2.0解决方案,可以与任何兼容的实现一起使用。

uuids使用JPA的@ElementCollection注释进行注释。不要使用@CollectionOfElements其他一些答案中提到的Hibernate
。后者具有等效的功能,但已被弃用。

Foobar.java 大致如下所示:

@Entity
public class Foobar implements Serializable {

    // You might have some other id
    @Id
    private Long id;

    @ElementCollection
    private List<String> uuids;

    // Getters/Setters, serialVersionUID, ...

}

这里是你如何建立一个CriteriaQuery选择所有Foobar(胡)的uuids含有“ABC123”。

public void getFoobars() {
{
    EntityManager em = ... // EM by injection, EntityManagerFactory, whatever

    CriteriaBuilder b = em.getCriteriaBuilder();
    CriteriaQuery<Foobar> cq = b.createQuery(Foobar.class);
    Root<Foobar> foobar = cq.from(Foobar.class);

    TypedQuery<Foobar> q = em.createQuery(
            cq.select(foobar)
              .where(b.isMember("abc123", foobar.<List<String>>get("uuids"))));

    for (Foobar f : q.getResultList()) {
        // Do stuff with f, which will have "abc123" in uuids
    }
}

我在玩这个游戏时编写了一个独立的概念验证程序。我现在不能将其推出。如果您想将POC推送到github,请发表评论。



 类似资料:
  • 问题内容: 该字符串: 总是扩展为: 谁能告诉我为什么? 编辑:上面的扩展的字符串是我的数据库在错误消息中给我的字符串。我正在使用psycopg2访问我的postgres数据库。实际的代码如下所示: 问题答案: 不仅E,而且引号似乎来自user和pw所具有的任何类型。%s只是做str()做的事情,可能会退回到repr(),这两个都有对应的方法和。另外,那不是生成您的结果的代码(我假设有一个%,但是

  • 问题内容: 因此,我想在字符串中添加一个字符,在某些情况下,我想将该字符加倍,然后将其添加到字符串中(即先添加到字符串本身)。我尝试如下所示。 这引发了一个错误,但是我已经在字符串中添加了一个字符,所以我尝试了: 哪个有效。为什么在求和中包含字符串会导致它起作用?是否添加了一个字符串属性,该字符串属性由于存在字符串而只能在字符转换为字符串时才能使用? 问题答案: 这是因为String + Char

  • 问题内容: 我需要一条SQL更新语句来更新所有行的特定字段,并在现有值的前面添加一个字符串“ test”。 例如,如果现有值为“ try”,则应变为“ testtry”。 问题答案: 您可以使用CONCAT函数来执行此操作: 如果您想更聪明地只更新尚未预先测试的列,请尝试

  • 本文向大家介绍在Java中将字符串集合转换为字符串数组,包括了在Java中将字符串集合转换为字符串数组的使用技巧和注意事项,需要的朋友参考一下 首先,创建一个字符串集- 现在,使用toArray()方法转换为字符串数组- 示例 以下是在Java中将字符串集转换为字符串数组的程序- 输出结果

  • 问题内容: 我是Java新手,所以我几乎不需要帮助 我有 我想向此数组(脚本)添加新的字符串(string1,string2)作为示例 我想在以后的阶段中不添加新字符串 我该怎么办? 问题答案: 您无法在Java中调整数组的大小。 声明数组的大小后,它将保持固定。 相反,您可以使用具有动态大小的对象,这意味着您无需担心其大小。如果数组列表的大小不足以容纳新值,则它将自动调整大小。

  • 问题内容: 如果我有一个字符串变量: 我想在每一个前面加一个转义字符和 变量中 (即 未 竟逃脱字符),我该怎么做? 问题答案: 我不是在这里要求优雅,但我 认为 它可以满足您的要求(如果我误会了,请纠正我): 输出