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

hibernate:可以用Criteria API左外连接吗?

唐烨煜
2023-03-14

我是新加入Hibernate的,所以请原谅我的陈词滥调,但我找不到任何与我的问题相关的答案(我试图搜索文档)

如果可能的话,我将从两个表(t0t1)创建一个左外部联接,而不使用HQL;在我的例子中,我只想使用Criteria API。

t0 { id, fieldA, fieldB }

t1 { id, fieldC, fieldD }

我不知道哪些字段将用于连接,用户可以决定。

我看到Criteria API有一些不错的函数,比如createAliascreateCriteria,但是如果我使用这些方法,我就无法运行连接。

每个表都有一个类(映射为特定的hbm.xml),如下所示:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-access="field">

<class name="it.class.T0" table="t0">
    <meta attribute="class-description">Table 0</meta>
    <!-- Unique id -->
    <id name="id" type="long" column="id">
        <generator class="native"/>
    </id>
    <!-- Natural key -->
    <natural-id mutable="true">
        <property name="fieldA" type="string" column="fieldA" not-null="true" />
        <property name="fieldB" type="string" column="fieldB" not-null="true" />
    </natural-id>
    <!-- Fields -->
    <property name="column1" type="long" column="columnd1" not-null="true" />
    <property name="column2" type="string" column="column2" not-null="false" />
</class>

</hibernate-mapping>

实体类是这样的:

public class T0 implements Serializable
{
   private static final long serialVersionUID = -8123118569358735984L;

   public long               id;

   public String             fieldA;
   public String             fieldB;
   public long               column1;
   public String             column2;

   public T0()
   {
      super();
   }
}

是否可以通过编程方式(使用Criteria API)创建左外部联接,而无需在hbm中指定。xml(或在特定的HQL中)要使用哪些字段?

共有1个答案

尉迟国发
2023-03-14

不,你不能使用hibernate api创建一个基于hibernate不知道的映射的连接。这有点违背了首先使用hibernate的目的。那为什么不直接写sql呢?;-)

 类似资料:
  • 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类的代码: 问题答案: 尝试多

  • 另一个宽大处理--B: 这里要注意,实体A和B之间没有隐式关系,B表中的a_id是手工处理的,因此--关系类似于一对多(A-->B),但不是jpa-hibernate关系。而且,我的FullDto有A的所有属性和B的列表: 现在,我想从A的存储库接口中提取所有内容(A和B表一次完成),如下所示:

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

  • 我正在尝试使用Criteria API获取以下查询: 我做到了: 尝试添加 实体看起来像 和 尝试以不同的方式使用联接,但看起来我缺少了一些东西。我得到了orderBy,谓词都是正确的。我正在使用JPA 2.1和Oracle。