休眠映射-多表查询

时间:2018-06-27 10:34:35

标签: java hibernate hibernate-mapping

我正在开发一个使用hibernate和drools文件对数据库表进行CRUD操作的应用程序,这时我需要提供具有特定ID的菜单,该ID目前可以进行硬编码。

我有必要的查询来使其可用,我想在休眠状态下使用它或对其进行仿真,以便调用.hbm并输出此查询的结果。 考虑到我无权访问.java文件,因此只能创建需要输出的.hbm和.xml文件。

我可以列出应用程序中执行此查询所需的所有表。出现的问题是:如何使用所有这些模型(使每个表可用的休眠映射文件)来创建单个.hbm文件来调用它们,在哪里可以模拟所需的查询?

查询如下:

select distinct d.* from Group MB, Access AI, Item I, Module M, MenuItem D
where
mb.IdGroup = AI.IdGroup and ai.CodItem = i.CodItem and i.Module = m.Module and 
mb.CodSis = ai.CodSis and ai.CodSis = i.CodSis and i.CodSis = m.CodSis and
m.CodSis = 103 and mb.IdUtil= 29 
and
d.Coditem = i.CodItem
and
d.parentMenuID = 0

列出每个表的hbm模型看起来像这样:(列出菜单表的示例)

Menu.hbm.xml

<hibernate-mapping>
    <class name="authorization.model.Menu" table="MenuItem" where="ParentMenuID = 0 ">  
      <composite-id>
      <key-property column="Id" name="id" type="int"/>
      </composite-id>
      <property column="label" name="__label" type="string"/>
    <property column="actionURL" name="__actionURL" type="string"/>
    <property column="ParentMenuID" name="__ParentMenuID" type="string"/>
    <property column="MenuID" name="__MenuID" type="int"/>
    <property column="Coditem" name="__Coditem" type="int"/>
  </class>
</hibernate-mapping>

Menu.xml

<?xml version="1.0" encoding="utf-8" ?>
<concept name="menu">
  <action name="readlist" jsonMetainfo="{
          'columns':[
              {'key':'__ParentMenuID', 'order':1, 'allowSort':false, 'type':'text', 'exportable':true},
              {'key':'__Coditem', 'order':2, 'allowSort':false, 'type':'text', 'exportable':true},
              {'key':'__label', 'order':3, 'allowSort':false, 'type':'text', 'exportable':true},
          ],
          'defaultSort':{'column':2, 'type':'asc'},
          'actions':[]
      }" />
</concept>

这样,我可以列出没有任何过滤器的菜单表,仅列出该表。 我需要模拟上面的查询,我已经尝试将<many-to-one name="Item" class="authorization.model.Item" insert="false" update="false" not-found="ignore"/><many-to-one>用于所有我只需要列出它们的模型(列出表),并确保我将所有需要的表都放在一个.hbm文件中。 (列出它们以确保..),但是它不起作用。 根据我的情况,有没有一种方法可以执行该查询?

经过大量搜索,我仍然找不到解决我问题的方法,希望有人能帮助我。

0 个答案:

没有答案