当前位置: 首页 > 面试题库 >

在休眠中使用反true

钱跃
2023-03-14
问题内容

我正在浏览hibernate文档,并遇到了逆属性的概念。我是Hibernate的新手,所以我很难正确理解该概念。

http://docs.jboss.org/hibernate/orm/3.3/reference/zh-
CN/html/collections.html#collections-
bidirectional

<class name="Category">
    <id name="id" column="CATEGORY_ID"/>
    ...
    <bag name="items" table="CATEGORY_ITEM">
        <key column="CATEGORY_ID"/>
        <many-to-many class="Item" column="ITEM_ID"/>
    </bag>
</class>

<class name="Item">
    <id name="id" column="ITEM_ID"/>
    ...

    <!-- inverse end -->
    <bag name="categories" table="CATEGORY_ITEM" inverse="true">
        <key column="ITEM_ID"/>
        <many-to-many class="Catehtml" target="_blank">gory" column="CATEGORY_ID"/>
    </bag>
</class>

从上面的代码中,inverse="true"应用于类别,因此我知道类别是相反的一端。

但是我发现我的理解有些矛盾:

仅对关联的反向端所做的更改不会保留。

category.getItems().add(item);   // The category now "knows" about the relationship
item.getCategories().add(category); // The item now "knows" about the relationship

session.persist(item);   // The relationship won't be saved!
session.persist(category);   // The relationship will be saved

如果类别在相反的一端,那么关系如何保存在这里?

非反面用于将内存中的表示形式保存到数据库中。

看完示例并阅读了上面的陈述后,我知道类别在非相反的一端。

请帮助我了解如何解释此inverse="true"属性。在网上搜索并查看了SO的答案后,我知道了此属性的有用性,但仍然感到困惑。


问题答案:

inverse="true"基本上意味着逆关系也映射到另一个类的类定义中。但是,真正的含义是它定义了哪一方是两个实体(父实体或子实体)的父级或关系所有者。因此,inverse="true"在Hibernate中,映射显示该类(具有XML定义的类)是关系所有者;而另一类是孩子。

如果您想了解更多有关此的信息,那么我一定会看一下这篇文章:http : //www.mkyong.com/hibernate/inverse-true-
example-and-explanation/
因为它很容易被误导hibernate状态下该属性的含义。



 类似资料:
  • 问题内容: 如何将sql查询写入休眠条件? 问题答案: 认为我找到了答案。您必须使用Projection.sqlProjection()而不是Projections.sum()。例:

  • 问题内容: 我有一个Spring和Hibernate3在生产中运行良好的应用程序。以下是Spring的applicationContext.xml中会话工厂的配置 生产正常。 现在,对于另一个项目,我们正在迁移到Hibernate4。我们使用org.springframework.orm.hibernate4。*包中的Hibernate 4的SessionFactory,TransacionMan

  • 问题内容: 我正在寻找展示如何将MongoDB与Hibernate集成的资源(最好是在Spring内),以便我可以在RDBMS和NoSql替代品之间进行切换:有人有这样做的经验吗? 问题答案: 您不能轻易做到这一点。Hibernate的重点是将Java对象映射到关系数据库。尽管Hibernate提取了许多细节,但您仍然需要了解关系数据库如何与诸如外键和主键之类的东西一起工作,以及运行查询对性能的影

  • 问题内容: 我有几个SQL查询,我只是想在数据库上触发。我在整个应用程序中都使用hibernate方式,因此我更喜欢使用hibernate方式来调用此sql查询。 在下面的示例中,我想获取count +名称,但是当我使用createSQLQuery()时无法弄清楚如何获取该信息。 我已经看到了一些解决方法,人们只需 要从结果中 得出一个“ count( )”,但是在这种情况下,我使用count(

  • 问题内容: 我面临着要与MySQL 5.0一起使用而编写的旧系统,现在需要将其迁移到MysQL 5.5(要求)。我发现一列名为,这在MySQL 5.5中似乎是系统单词。因此,我所有包含此列的Hibernate查询都给出语法错误: 由以下原因引起:java.sql.BatchUpdateException:您的SQL语法有错误。检查与您的MySQL服务器版本相对应的手册,以获取在’maxvalue附

  • 问题内容: 我正在尝试实现一个Hibernate会话/事务拦截器,以避免Struts2中的json结果出现,但无论如何我都会得到此异常: 我的拦截器如下所示: 这是行不通的,我越来越之前甚至和 问题答案: 好的,最后我解决了将通用DAO注入(带有会话和事务)添加到genericAction的问题。这适用于带有惰性hibernatebean的JSONResults和jsp。 感谢您对“ bmorri