簡體   English   中英

休眠:可以使用Criteria API進行外部左連接嗎?

[英]hibernate: left outer join with Criteria API, is possible?

我是Hibernate的新手,所以請原諒我平庸,但我找不到與我的問題有關的任何答案(我試圖在docs和SO上進行搜索)。

如果可能的話,我將不使用HQL從兩個表( t0t1 )創建一個左外部聯接。 就我而言,我只想使用Criteria API。

t0 { id, fieldA, fieldB }

t1 { id, fieldC, fieldD }

我不知道將使用哪些字段進行連接,用戶可以自行決定。

我看到Criteria API具有一些不錯的功能,例如createAliascreateCriteria但如果使用這些方法,則無法運行createCriteria

每個表都有一個這樣的類(映射有特定的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而無需在hbm.xml (或特定的HQL)中指定要使用的字段?

不能。您不能使用休眠api基於映射建立連接,休眠對此一無所知。 首先,它會破壞使用休眠的目的。 為什么不只寫sql呢? ;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM