2016-11-28 78 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