我有一个结构,其中主表是 USER,其他表包括 CATEGORY(包含 user_id)。
经过标准逆向工程程序后我得到的是:
- User 类包含类别的集合,
- Category 类不包含外键 (user_id),但包含 User 对象。
为什么它不包含外键作为类属性?
如何在没有胶水的情况下在 HQL 中连接这两个表? HQL - 请解释这部分。
最佳答案
Why did it not contain the foreign key as a class property?
因为 Hibernate 是一个对象-关系映射工具,Hibernate 允许使用对象模型(即对象和对象之间的关系)并将它们映射到数据库表示(表的数据行)。 Hibernate 的全部意义在于弥合面向对象范式和关系范式之间的差距(著名的 Object-Relational Impedance Mismatch )。在您的情况下,以下对象模型是预期的(正确的)对象表示:
alt text http://img251.imageshack.us/img251/6335/110b578b.png
And how do I join these two tables in HQL without that glue?
胶水 就在那里,但你必须考虑对象(和关联)。例如(参见 14.3. Associations and joins):
from Category as category join category.user as user
请注意,HQL 支持两种形式的关联加入:隐式 和显式(参见14.4. Forms of join syntax)。上面的示例使用了一个显式 连接。 隐式 形式不使用 join 关键字,而是使用点符号:
from Category category where category.user.id =: id
关于java - Hibernate逆向工程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2416775/