Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate逆向工程_Java_Hibernate_Orm - Fatal编程技术网

Java Hibernate逆向工程

Java Hibernate逆向工程,java,hibernate,orm,Java,Hibernate,Orm,我有一个结构,其中主表是USER,其他表包括CATEGORY(包含USER\u id) 在标准逆向工程程序之后,我得到的是: 类用户包含一组类别 类类别不包含外键(用户id),但它确实包含用户对象 为什么它不包含外键作为类属性 如果没有胶水,我如何在HQL中连接这两个表? HQL-请解释此部分。在这种情况下,Hibernate会自动为您处理外键。在Java方面,您不需要考虑外键,而需要考虑聚合。这就是为什么Category包含(对)User对象的引用,而不是FK。Hibernate映射中指定

我有一个结构,其中主表是USER,其他表包括CATEGORY(包含USER\u id)

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

  • 类用户包含一组类别
  • 类类别不包含外键(用户id),但它确实包含用户对象
为什么它不包含外键作为类属性

如果没有胶水,我如何在HQL中连接这两个表?
HQL-请解释此部分。

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

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

更新:HQL示例:

from Category as category inner join fetch category.user as user
例子改编自


有关映射的更多详细信息,请参见to 7。

我同意péter Török的观点:当前的hibernate行为是预期的

例如,当您更新一个类别时,如果您修改了用户而不是原始FK,hibernate应该怎么做

你为什么需要原始的FK?您只需执行category.getUser().getId();以访问它,而不冒类别对象中状态不一致的风险

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

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

如果没有胶水,我如何在HQL中连接这两个表

胶水在那里,但你必须考虑对象(和关联)。例如(见):

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

from Category category where category.user.id =: id

我懂了。对我来说,将用户对象和外键同时存在是很自然的。让我们看看其他人会怎么回答。谢谢。@EugeneP请参阅我的最新解释和参考资料-希望它有助于澄清问题。在Java类中同时拥有
User
对象和FK将是重复的,需要更多的同步,并为错误提供更多的可能性。此外,PK和FK(应该)通常是数据库的私有部分(这是Hibernate中的建议)。@EugeneP I添加了一个HQL示例和一个参考。感谢您完整而有用的回答。
from Category category where category.user.id =: id