Sql 休眠:使用2个非主键加入
我想从2表做一个左外部联接,但使用的是不是主键的2键。 这是使用的本机sql查询:Sql 休眠:使用2个非主键加入,sql,hibernate,join,key,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(Obje
也许有更好的办法
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())
{
....
}
映射文件时,请执行以下操作:
<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>
映射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>
从这个查询中,我获得了两个对象,一个是A类型的,另一个是B类型的,有很多正确的数据,但是A类型的对象中的集合BDOC没有填充目标是仅获取A对象,其中变量BDocs填充有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>
public class B_Class implements java.io.Serializable
{
private String rowId;
private String quoteNum;
// omitted all the set and get
}