Hibernate Criteria 不向表中添加模式

Posted

技术标签:

【中文标题】Hibernate Criteria 不向表中添加模式【英文标题】:Hibernate Criteria do not add schema to table 【发布时间】:2018-01-31 16:06:12 【问题描述】:

我有三个表 device 、 vehicle 和 vehicle_device 所有表都在一个模式 'tcm' 中,我正在尝试通过 'device imei' 获取 'vehicle' 。在 Vehicle.class 我有字段“设置设备”并创建映射:

Vehicle.hbm.xml

<hibernate-mapping package="hibernate.entity">
<class name="Vehicle" table="vehicles" schema="tcm">
    <id name="id" type="integer" column="id">
       <generator class="sequence">
            <param name="sequence">tcm.vehicles_id_seq</param>
        </generator>
    </id>       
    .
    .
    .
    <set name="devices" table="vehicle_device"
        inverse="false" lazy="true" fetch="select" cascade="all" >
        <key>
            <column name="vehicle_id" not-null="true" />
        </key>
        <many-to-many entity-name="hibernate.entity.Device">
            <column name="device_id" not-null="true" />
        </many-to-many>
    </set>

</class>

当执行条件以获取所需“设备 imei”的结果时

@Override
public Vehicle getVehicleByDeviceImei(String imei) 
    Criteria criteria = getSession().createCriteria(Vehicle.class);
    criteria.createAlias("devices", "devices").add(Restrictions.eq("devices.imei", imei));
    Vehicle v = (Vehicle) criteria.uniqueResult();
    return v;

除了生成的查询没有在第一个内部连接中为链接表“vehicle_device”添加架构“tcm”之外,一切都很好

select       .
             .
             .
             .
from
    tcm.vehicles this_ 
inner join
    vehicle_device devices3_ 
        on this_.id=devices3_.vehicle_id 
inner join
    devices devices1_ 
        on devices3_.device_id=devices1_.id 
where
    devices1_.device_imei=?

并且有一个错误: 错误:关系“vehicle_device”不存在 第 17 行:vehicle_device devices3_

如果我将手动模式添加到生成的查询 --> 'tcm.vehicle_device' 它可以工作。 如何修复我的配置,以便 Hibernate Criteria 添加表“vehicle_device”的架构。

【问题讨论】:

你能分享你的hibernate-configuration cfg 文件吗? 【参考方案1】:

我解决问题。我刚刚在映射的 set 标记中添加了 scheme = 'tcm'

【讨论】:

以上是关于Hibernate Criteria 不向表中添加模式的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate Criteria用法大全

Hibernate Criteria用法大全

hibernate.jpa.criteria.BasicPathUsageException:无法加入基本类型的属性

hibernate之HQL,Criteria与SQL

使用 Hibernate Criteria 获取具有最大 id 的记录

Java Criteria Query with Hibernate - 生成的别名无效路径?