我是 Hibernate 的新手,所以请原谅我的平庸,但我找不到与我的问题相关的任何答案(我试图搜索文档和 SO)。
如果可能的话,我会在不使用 HQL的情况下从两个表 (t0
和) 创建一个左外连接;t1
就我而言,我只想使用 Criteria API。
t0 { id, fieldA, fieldB }
t1 { id, fieldC, fieldD }
我不知道哪些字段将用于联接,用户可以自行决定。
我看到 Criteria API 有一些不错的功能,例如createAlias
orcreateCriteria
但如果我使用这些方法,我无法运行连接。
每个表都有一个类(映射到特定的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 中)指定要使用的字段?