こんばんは!
私はしばらくの間Hibernateを学習して部分的に使用してきましたが、hql結合を使用すると問題が発生しました。
私は練習のためだけにこれらの指示に従い、それがどのように機能するかを確認しました...
http://www.java2s.com/Tutorial/Java/0350__Hibernate/HSQLJoinTwoClasses.htm
彼は基本的に、
サプライヤー
、製品、ソフトウェアの3つのクラスを作成します。
製品多くの製品には1つのサプライヤーがあります
すべてがうまく機能しました...それを自分のコードに実装することを妨げる特定のことを理解できないことを除いて。これは私が理解できない部分です:
<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";
どこにもsupplierIDが定義されていないのに、なぜ彼は列の値として「supplierId」を使用しているのですか。バックグラウンドで何が起こっているのか、なぜそれが機能しているのか理解できません...
私は何年もの間説明を探していました。あなたの一人がそのような経験をして、私を助けてくれることを願っています。本当に素晴らしいでしょう。私が漠然としていなかったといいのですが。
良い一日を、マイケル・カーグル
解決
問題は、データベースの実際の外部キー列がsupplierIDと呼ばれることを見逃したことです...create table Product(
id int,
name varchar,
description varchar,
price decimal(6,2),
>>>> supplierid int <<<<<
)
(私は二度とそのようなコードをコピーして貼り付けることはありません。)
残りは@carbontaxの投稿と@MikkoMaunuの投稿によって大いに説明されています