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

Criteria Api中的左外连接

曾阳飙
2023-03-14

我正在尝试使用Criteria API获取以下查询:

select lang.* from LKUP_LANG lang LEFT OUTER JOIN LANG_SEQUENCES seq ON
lang.SHORT_NAME=seq.LANG_CODE and (lang.DISPLAY_NAME is not null)
order by nvl(seq.SEQ_LANG_CODE, 2147483647) asc;

我做到了:

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Lang> criteriaQuery = builder.createQuery(Lang.class);
Root<Lang> languageRoot = criteriaQuery.from(Lang.class);

List<Predicate> predicates = new ArrayList<>();
// added some predicates
criteriaQuery.orderBy(...);

尝试添加

Join<Lang, LANG_SEQUENCES> join = languageRoot.join("languageSequences",JoinType.LEFT);

实体看起来像

LanguageSequences
@Id
@Column(name = "LANG_CODE")
private String langCode;

@Column(name = "SEQ_LANG_CODE")
private int seqLangcode;

@OneToOne
@Fetch(FetchMode.JOIN)
@JoinColumn(name = "LANG_CODE", referencedColumnName = "SHORT_NAME")
private Lang lang;

Lang
@Column(name = "DISPLAY_NAME", unique = true)
private String displayName;

@Id
@Column(name = "SHORT_NAME")
private String shortName;

@OneToOne(cascade = CascadeType.ALL, mappedBy = "lkupLanguage")
private LanguageSequences languageSequences;

尝试以不同的方式使用联接,但看起来我缺少了一些东西。我得到了orderBy,谓词都是正确的。我正在使用JPA 2.1和Oracle。

共有1个答案

顾嘉纳
2023-03-14

在JPA中,不能选择序列,应使用本机查询

 类似资料:
  • LEFT OUTER JOIN 左外连接 [ ] 需求:查询所有分类,如果该分类下没有商品,则不显示该分类 [ ] 实现: SELECT `goods`.`id`, `goods`.`title`, `goods`.`price`, `goods`.`cate_id`, `cate`.`id`, `cate`, `cate.title` F

  • MariaDB 用于返回条件中指定的左侧表中的所有行,并仅返回满足连接条件的其他表中的行。 也被称为。 语法: 图形表示如下: 注: 上图中,两个图形的左侧表(table1)和右侧表(table2)中间交叉蓝色部分,以及左侧表(table1)就是连接返回的结果集。 为了方便演示,我们需要创建两个表,并插入一些数据 - 插入数据 - 当前表中的行记录如下 - 当前表中的行记录如下 - 示例1 使用以

  • 问题内容: 我有一个Hibernate的服务方法,例如:。securityId2由用户传递。每个SecurityContact与一个Contact有多对一的关系,因此Hibernate在运行此查询时会自动调用联接。但是,Hibernate始终运行的联接是内部联接,因此无法正常运行。有没有办法强迫Hibernate在内部生成左外部联接?这是SecurityContact类的代码: 问题答案: 尝试多

  • 早上好, 我正在进行SQL学习之旅,并试图创建一个带有一些查询的小型数据库以获得经验。使用的两个数据库,Person{id, name, age}和Knows{id,guest1_id→人员,guest2_id→人员} 查询应该会产生一个不认识数据库中任何人但可以被其他人知道的人的姓名列表。下面是我到目前为止得到的代码,但它似乎没有获得任何东西。 这里有什么问题? 非常感谢。

  • 我正在将数据库从MySQL切换到Postgres SQL。在MySQL中有效的select查询在Postgres中也有效,但类似的delete查询却不能。 我有两个数据表,列出了某些备份文件的位置。现有数据(ed)和新数据(nd)。此语法将挑选出可能说明文件在现有数据表中的位置的现有数据,根据相等的文件名和路径对其进行匹配,但没有关于文件在新数据中的位置的信息: 我希望使用以下语法运行删除查询:

  • 问题内容: 我正在使用Django的内置用户模型,并且具有一个自定义Foo对象,并带有一个用户外键。我正在寻找选择所有User对象和所有符合某些约束的Foo对象,例如: 我应该如何在Django中完成这项工作?到目前为止,我已经尝试过: 但这会生成类似于以下内容的SQL: 并且仅返回具有符合条件的Foo对象的User对象。或者,我可以选择所有User对象并为每个对象运行一个查询,但是效率会大大降低