当前位置: 首页 > 知识库问答 >
问题:

eclipselink jpa条件引用未映射列

陆博易
2023-03-14

在编写jpql查询时,我可以使用COLUMN()引用未映射的列(我知道它是eclipselink特定的)。在使用javax.persistence.criteria.CriteriaBuilder、javax.persistence.criteria.Predicate等构建标准时,有没有任何方法可以引用未映射的列?

我面临的问题:我有带有全文搜索列的postgresql表。我不希望它映射到实体对象,但我想在查询中使用is(我也需要使用CriteriaBuilder的查询)。

编辑:代码示例

我有一个表:X(id integer,name varchar,fts tsvector)

@Entity class X {
    @Id Integer id;
    @Column String name;
}
Specification<Fts> spec = new Specification<Fts>() {
        @Override
        public Predicate toPredicate(Root<Fts> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
            return builder.notNull(root.<String>get("fts"));
        }
    };

另一种选择:如何在实体类中添加引用表列但从未被取到的属性?我尝试添加@basic(fetchType=fetchType.lazy),但它不起作用,在查询时取值...

共有1个答案

宰父浩漫
2023-03-14

好的。我设法这样解决:

Specification<Fts> spec = new Specification<Fts>() {
        @Override
        public Predicate toPredicate(Root<Fts> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
            JpaCriteriaBuilder cb = (JpaCriteriaBuilder) builder;
            List<String> args = new ArrayList();
            args.add("FTS query");

            javax.persistence.criteria.Expression<Boolean> expr = cb.fromExpression(
              cb.toExpression(
                cb.function("", Boolean.class, cb.fromExpression(((RootImpl) root).getCurrentNode().getField("fts")))
              )
              .sql("? @@ to_tsquery(?)", args)
            );
            // getField() allows to reference column not mapped to Entity

            query.where(expr);

            return null; // or return cb.isTrue(expr); and then not need to set query.where()
        }
    };
 类似资料:
  • 前端将这个json发送到我的API 控制器:

  • 正如我们所知,是一个Python内置函数。 我目前使用PyCharm 3.4.1,它报告了一个 未解析的引用“map” 在我的代码中: 其中地图单词带有红色波浪下划线,并显示此消息提示。 我一直在阅读关于以下问题的文章:PyCharm显示有效代码的未解析引用错误 并做了文件|使缓存无效…并重新启动PyCharm有所帮助。 但问题仍未解决。 更多信息,我正在开发Django 1.6对象。项目解释器如

  • 我对webflux比较陌生,我想找到解决方案,在有条件时避免嵌套flatMap: 如何防止这种分支条件平面映射混乱?我无法想象如果我在项目中有另一个实体。会有更多嵌套的平面地图?

  • 我创建了一个对象,它映射了数据库中的两个表:字典表和令牌表。表示这两个表之间连接的对象(类)称为DictionaryToken。 下面是课程: 公共类DictionaryToken{private static Logger LOG=Logger.getLogger(DictionaryToken.class); 这是我的问题。除非我添加了一个条件,否则我可以使用带有这个对象的服务执行查询。下面是

  • 问题内容: 我一直在研究一个非常简单的JPA示例,并试图将其调整为现有数据库。但是我无法克服这个错误。(下面。)这只是我没看到的一些简单的事情。 在下面的DocumentManager类中(一个简单的servlet,因为这是我的目标),它做了两件事: 插入一行 返回所有行 插入效果很好-一切都很好。问题出在检索上。我尝试了各种参数值,但没有走运,并且尝试了各种更复杂的类注释(如列类型),但都没有成

  • 当我尝试通过枚举将源中的字符串映射到目标中的整数时。ModelMapper失败。 来源 目的地 字符串和整数之间的映射在枚举中定义