Hibernate:使用2 NOT主键加入

时间:2014-03-12 13:32:16

标签: sql hibernate join key

我想从2个表中执行左外连接,但是使用2个不是主键的键。 这是使用的本机sql查询:
也许还有更好的方法吗?

SQLQuery query = session.createSQLQuery("
select {A.*},{B.*} from A_TABLE A left outer join B_TABLE B on A.QUOTE_ID = B.QUOTE_NUM ")
.addEntity("A", A_Class.class)
.addJoin("B", "A.bDocs");

for(Object result : query.list()) 
{
....
}

映射A文件:

<class name="A_Class" table="A_TABLE" schema="S">
        <id name="rowId" type="string">
            <column name="ROW_ID" length="60" />
            <generator class="assigned" />
        </id>
        <set name="BDocs" inverse="true" fetch="select" lazy="false">
            <key>
                <column name="QUOTE_NUM" length="60" not-null="true" />
            </key>
            <one-to-many class="B_Class" />
        </set>

A_Class.java

public class A_Class implements java.io.Serializable 
{     
     private String rowId;
     private String QuoteId;
     private Set BDocs= new HashSet(0);
     // omitted all the set and get
}

映射B文件:

<hibernate-mapping>
    <class name="B"  table="B_TABLE" schema="S">
        <id name="rowId" type="string">
            <column name="ROW_ID" length="60" />
            <generator class="assigned" />
        </id>
        <many-to-one name="A" class="A_Class" fetch="select" lazy="false" outer-join="true" foreign-key="QuoteId" property-ref="QuoteId">
            <column name="QUOTE_NUM" length="60" not-null="true" />
        </many-to-one>

B_Class.java

public class B_Class implements java.io.Serializable
{
    private String rowId;
    private String quoteNum;
    // omitted all the set and get
}

从这个查询中我获得了两个对象,一个是A类型,另一个是B类型,有很多正确的数据,但是没有填充A类对象中的集合BDocs。 目标是只获取带有B对象的变量BDocs的A对象。

我不明白问题是在查询中还是在映射文件中。
任何人都可以帮助我吗?

0 个答案:

没有答案