【发布时间】:2012-06-19 09:55:28
【问题描述】:
晚上好!
我已经学习并部分使用了休眠一段时间,但在使用 hql 连接时遇到了麻烦。
我遵循这些说明只是为了练习,看看它是如何工作的......
http://www.java2s.com/Tutorial/Java/0350__Hibernate/HSQLJoinTwoClasses.htm
他基本上创建了 3 个类:
供应商、产品、软件
一个供应商有很多产品
许多产品都有一个供应商
一切都很好......除了我无法理解阻止我在自己的代码中实现它的特定事物。 这是我无法理解的部分:
<class name="Product">
<id name="id" type="int">
<generator class="increment"/>
</id>
<property name="name" type="string"/>
<property name="description" type="string"/>
<property name="price" type="double"/>
<many-to-one name="supplier" class="Supplier" column="supplierId"/>
</class>
<class name="Supplier" >
<id name="id" type="int">
<generator class="increment"/>
</id>
<property name="name" type="string"/>
<bag name="products" inverse="true" cascade="all,delete-orphan">
<key column="supplierId"/>
<one-to-many class="Product"/>
</bag>
</class>
The query would be:
SELECT s.name, p.name, p.price
FROM Product p INNER JOIN p.supplier AS s";
当到处都没有定义供应商ID时,为什么他使用“supplierId”作为列值。我无法弄清楚后台发生了什么,或者为什么它甚至可以工作......
多年来,我一直在寻找解释。希望你们中的某个人有过类似的经历,可以帮助我。真的很棒。希望我不是太含糊。
祝你有美好的一天, 迈克尔·卡格尔
解决方案
问题是我错过了数据库中实际的外键列被称为供应商ID ...create table Product(
id int,
name varchar,
description varchar,
price decimal(6,2),
>>>> supplierid int <<<<<
)
(我再也不会像那样复制和粘贴代码了..)
@carbontax's post 和 @MikkoMaunu's post 对其余部分进行了很好的解释
【问题讨论】:
标签: hibernate hql hibernate-mapping