首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate逆向工程

Hibernate逆向工程
EN

Stack Overflow用户
提问于 2010-03-10 12:22:42
回答 3查看 1.8K关注 0票数 4

我有一个主表是用户的结构,其他表包括类别(包含user_id)。

我在标准逆向工程程序之后得到的是:

  • 类用户包含一个类别集合,
  • 类类别没有包含外键(user_id),但它确实包含了用户对象。

为什么它不将外键作为类属性包含?

在没有胶水的情况下,如何加入HQL中的这两张桌子?HQL -请解释这部分。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-10 14:46:17

为什么它不将外键作为类属性包含?

由于Hibernate是一个Object-Relational映射工具,Hibernate允许使用对象模型(即对象和对象之间的关系)并将它们映射到数据库表示(表的数据行)。Hibernate的全部目的是弥合面向对象范式和关系范式(著名的对象-关系阻抗失配)之间的差距。在您的示例中,下面的对象模型是预期的(和正确的)对象表示:

alt文本http://img251.imageshack.us/img251/6335/110b578b.png

在没有胶水的情况下,如何加入HQL中的这两张桌子?

胶水在那里,但你必须考虑对象(和关联)。例如(请参阅14.3.协会和联接):

代码语言:javascript
复制
from Category as category join category.user as user

注意,HQL支持两种形式的关联连接:隐式和显式(参见14.4.联接语法形式)。上面的示例使用显式联接。隐式表单不使用join关键字,而是使用点表示法:

代码语言:javascript
复制
from Category category where category.user.id =: id
票数 3
EN

Stack Overflow用户

发布于 2010-03-10 12:26:53

在这种情况下,Hibernate自动为您处理外键。在Java方面,您不需要考虑外键,而需要考虑聚合。这就是为什么Category包含一个(引用) User对象,而不是一个FK。类user属性CategoryUSER表中的FK列之间的绑定在Hibernate映射中指定。

如果然后使用这些类创建条件或查询,Hibernate将使用正确的FK自动生成SQL查询。我没有使用HQL的经验,但我确信Hibernate也正确地处理了这个问题。

更新: HQL示例:

代码语言:javascript
复制
from Category as category inner join fetch category.user as user

示例改编自这里

有关映射的更多细节,请参见Hibernate参考文献,第5章 to 7。

票数 3
EN

Stack Overflow用户

发布于 2010-03-10 14:06:36

我同意Péter T r k的观点:目前的冬眠行为是人们所期待的。

例如,当您更新修改用户而不是原始FK的类别时,hibernate应该做什么?

你为什么需要生的FK?您只需执行category.getUser().getId();才能访问它,而不会在您的类别对象中冒出不一致的状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2416775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档