2016-11-28 3 views
0

У меня есть 2 таблицы в mysql, blocked_histories и blocked_detail_histories. Таблица block_detail_histories имеет отношение «один к одному» спящего режима к block_histories. сценарии создания таблицы выглядит следующим образомHibernate 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; 

и отображение спящего режима выглядит следующим образом

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 Query в HQL запрос, результат не дает мне ничего .. HQL выглядит следующим образом (в «: ​​идентификатор "здесь ява 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" пункта вместо "где" Пример: 'ВЫБРАТЬ Orders.OrderID, Customers.CustomerName, Orders.OrderDate FROM Orders 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 
Смежные вопросы