Hibernate HQL映射不寻常的列名

Hibernate HQL映射不寻常的列名,hibernate,hql,hibernate-mapping,Hibernate,Hql,Hibernate Mapping,晚上好 我已经学习和部分使用hibernate有一段时间了,但在使用hql连接时遇到了麻烦 我遵循这些说明只是为了练习,看看它是如何工作的… 他基本上创建了3个类: 供应商、产品、软件 一个供应商有很多产品 许多产品都有一个供应商 一切都很顺利。。。除了我不能理解一件特殊的事情,它阻止我在自己的代码中实现它。 这是我无法理解的部分: <class name="Product"> <id name="id" type="int"> <genera

晚上好

我已经学习和部分使用hibernate有一段时间了,但在使用hql连接时遇到了麻烦

我遵循这些说明只是为了练习,看看它是如何工作的…


他基本上创建了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";

问题是:
选择s.name、p.name、p.price
从产品p内部加入p供应商作为s”;
为什么他使用“supplierId”作为列值,而到处都没有定义supplierId。我不知道背景中发生了什么,甚至不知道它为什么起作用

我一直在寻找一个解释很久了…希望你们中的一个有过这样的经历并且能帮助我。那真的很好。希望我不是太含糊

祝你今天愉快, 迈克尔·卡格尔


解决方案 问题是我忽略了数据库中实际的Foreignkey列被称为supplierID

create table Product(
       id int, 
       name varchar,
       description varchar,
       price decimal(6,2),
       >>>> supplierid int <<<<<
)
创建表产品(
id int,
名字叫瓦查尔,
描述varchar,
价格小数(6,2),
>>>>供应商ID intIn


列的值定义产品表中外键列的名称。外键包含供应商表的某些主键值。 此列具体化数据库中产品和供应商之间的关系。没有此列,数据库中就没有产品和供应商之间的关系。 然后,Bag就是这种关系的反面

类似情况可从中找到。

 <many-to-one name="supplier" class="Supplier" column="supplierId"/>

列的值定义产品表中外键列的名称。外键包含供应商表的某些主键值。 此列具体化数据库中产品和供应商之间的关系。没有此列,数据库中就没有产品和供应商之间的关系。 然后,Bag就是这种关系的反面


类似的情况可以从中找到。

您说,
供应商ID
没有定义,但它是定义的

在产品定义中写入
时,将
供应商ID
定义为产品类上的字段

在Supplier类中,您告诉Hibernate,对于
产品
集合,产品类中外键的名称是
供应商ID


当您执行HQL语句时,Hibernate会将此信息转换为“ON p.supplierId=s.id”sql子句。

您说
supplierId
没有定义,但它是

在产品定义中写入
时,将
供应商ID
定义为产品类上的字段

在Supplier类中,您告诉Hibernate,对于
产品
集合,产品类中外键的名称是
供应商ID


Hibernate将此信息转换为“ON p.supplierId=s.id”"执行HQL语句时使用sql子句。

Awww我怎么会错过这个..你现在知道我现在有多尴尬了。永远不会少..谢谢你的精彩解释!它让一些事情变得更清楚了!谢谢!Awww我怎么会错过这个..你现在知道我现在有多尴尬了。永远不会少..谢谢很好的解释!它让一些事情变得更清楚了!谢谢!谢谢你的解释!我错过了那个“细节”让人尴尬。但是谢谢你的解释!简短明了..我有点困惑;)谢谢你们两个!祝您有个美好的一天!谢谢你的解释!不好意思,我错过了那个“细节”。。但是谢谢你的解释!短小精悍。。我不知怎么搞糊涂了;)谢谢你们两个!祝您有个美好的一天!