2016-11-28 142 views
0

我在mysql中有2個表,blocked_historiesblocked_detail_histories。 block_detail_histories表與block_histories具有多對一的休眠關係。表創建腳本看起來像這樣休眠HQL多對一連接

blocked_histories

CREATE TABLE `blocked_histories` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `type` VARCHAR(32) NOT NULL, 
    `no_ecash` varchar(13) NOT NULL, 
    `cif` VARCHAR(32) DEFAULT NULL, 
    `reason_id` INT(4) NOT NULL, 
    `desc` TEXT, 
    `status` VARCHAR(32) NOT NULL, 
    `created_date` DATETIME NOT NULL, 
    `created_by` VARCHAR(100) NOT NULL, 
    `total_balance` DECIMAL(15,6) NOT NULL, 
    `broker` int(11) NOT NULL, 
    `blocked_id` INT(11) NOT NULL UNIQUE, 
    `remark` text, 
    PRIMARY KEY (`id`), 
    CONSTRAINT `CUSTOMFIELD_ID_FK` FOREIGN KEY (`reason_id`) REFERENCES `custom_field_possible_values` (`id`) 
) ENGINE=INNODB AUTO_INCREMENT=312 DEFAULT CHARSET=latin1; 

blocked_detail_histories

CREATE TABLE `blocked_detail_histories` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `blocked_id` INT(11) NOT NULL, 
    `no_ecash` VARCHAR(13) DEFAULT NULL, 
    `prev_group` INT(11) NOT NULL, 
    `balance` DECIMAL(15,6) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `BLOCKED_ID_FK` (`blocked_id`), 
    CONSTRAINT `BLOCKED_ID_HISTORIES_FK` FOREIGN KEY (`blocked_id`) REFERENCES `blocked_histories` (`blocked_id`) 
) ENGINE=INNODB AUTO_INCREMENT=312 DEFAULT CHARSET=latin1; 

和Hibernate映射看起來像這樣

blocked_histories

<?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> 

    <class dynamic-insert="true" dynamic-update="true" 
     name="nl.strohalm.cyclos.entities.groups.BlockedHistories" 
     table="blocked_histories"> 
     <id name="id" type="long"> 
      <column name="id" sql-type="bigint" /> 
      <generator class="native" /> 
     </id> 
     <property name="type" column="type" type="string" not-null="true" length="32" /> 
     <property name="noEcash" column="no_ecash" type="string" not-null="true" length="13" /> 
     <property name="cif" column="cif" type="string" length="32" /> 

     <!-- <property name="reasonId" column="reason_id" type="int" not-null="true" length="11" /> --> 
     <many-to-one name="reasonId" class="nl.strohalm.cyclos.entities.customization.fields.CustomFieldPossibleValue"> 
      <column name="reason_id" sql-type="integer"></column> 
     </many-to-one> 

     <property name="desc" column="desc" type="text" not-null="true" /> 
     <property name="status" column="status" type="string" length="32" /> 
     <property name="createdDate" column="created_date" type="calendar" not-null="true" /> 
     <property name="createdBy" column="created_by" type="string" not-null="true" length="100"/> 
     <property name="totalBalance" column="total_balance" type="big_decimal" not-null="true" precision="15" scale="6" /> 
     <property name="brokerId" column="broker" type="int" not-null="true" length="11" /> 
     <property name="remark" column="remark" type="text" /> 
     <property name="blockedId" column="blocked_id" type="int" not-null="true" length="11" /> 
    </class> 

</hibernate-mapping> 

blocked_detail_histories

<?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> 

    <class dynamic-insert="true" dynamic-update="true" 
     name="nl.strohalm.cyclos.entities.groups.BlockedDetailHistories" 
     table="blocked_detail_histories"> 
     <id name="id" type="long"> 
      <column name="id" sql-type="bigint" /> 
      <generator class="native" /> 
     </id> 
     <many-to-one name="blockedHistories" class="nl.strohalm.cyclos.entities.groups.BlockedHistories"> 
      <column name="blocked_id" sql-type="integer"></column> 
     </many-to-one> 
     <property name="noEcash" column="no_ecash" type="string" not-null="true" length="13" /> 
     <property name="prevGroup" column="prev_group" type="int" not-null="true" length="11" /> 
     <property name="balance" column="balance" type="big_decimal" not-null="true" precision="15" scale="6" /> 
    </class> 

</hibernate-mapping> 

,你可以看到,blocked_detail歷史表中有許多對一個關係到blocked_histories表(「blockedHistories」欄)

我試圖運行一個簡單的MySQL查詢加盟看起來像這樣

select bh.created_date, bdh.no_ecash, bh.type, 
    bh.cif, bh.desc, bh.reason_id, 
    bh.status, bh.created_by, bh.remark 
from blocked_detail_histories bdh 
join blocked_histories bh 
where bdh.blocked_id=4; 

上面的MySQL查詢兩個表工作正常,但是當我試圖上面MySQL查詢HQL查詢轉換,結果給我什麼..的HQL看起來像這樣(下稱「:ID 「 這是 java的NamedParameters)

select bdh.blockedHistories.blockedId 
from BlockedDetailHistories bdh" 
join bdh.blockedHistories bh 
where bh.blockedId = :id 

我想這一個,但給我什麼也

select bh.createdDate, bdh.noEcash, bh.type, 
bh.cif, bh.desc, bh.reasonId, 
bh.status, bh.createdBy, bh.remark 
from BlockedDetailHistories bdh 
join bdh.blockedHistories bh 
where bh.blockedId = :id 

任何建議什麼,我在這裏失蹤?關係的定義可能?還是其他什麼?任何幫助將不勝感激:)

+0

SQL查詢對於連接似乎不正確。 應使用 「ON」 子句來代替 「其中」 示例: 'SELECT Orders.OrderID,Customers.CustomerName,Orders.OrderDate FROM訂單 INNER JOIN顧客 ON Orders.CustomerID = Customers.CustomerID; ' 來源:http://www.w3schools.com/sql/sql_join.asp –

回答

0

不是XML的專家冬眠映射, 但你施加休眠實體類獲取類型, 如果定義這樣,那麼您可以重試烏爾上述查詢如下(在遲緩場合中獲取類型)

select bdh.blockedHistories.blockedId 
from BlockedDetailHistories bdh 
left join fetch bdh.blockedHistories bh 
where bh.blockedId = :id