小编Sle*_*ine的帖子

何时适合使用双向关联,何时不使用?

让我们假设我们想构建一个类似于eBay的应用程序,其中我们有一个名为Customer的实体和一个名为的实体Order.

从关系角度来看,我将其建模为:

Customer
+----+-----+
| ID | ... |
+----+-----+

Order
+----+-------------+-----+
| ID | CUSTOMER_ID | ... |
+----+-------------+-----+
Run Code Online (Sandbox Code Playgroud)

现在,当我想将其映射到JPA时,我有多种选择:

  1. 创建从Order到Customer的单向多对一关联.恕我直言,这是最接近关系模型.缺点是,为了找到给定客户的所有订单,我必须编写JPQL查询,因为客户对其订单一无所知.此外,我不能以OO自然的方式为客户添加新订单(例如customer.addOrder(aNewOrder);).

  2. 创建从客户到订单的一对多关联.这样,为了找到我可以使用的给定客户的所有订单,我可以customer.getOders()以OO自然方式为客户添加新订单.缺点是,为了找出已下达给定订单的客户,我应该使用JPQL.

  3. 创建从客户到订单的双向一对多关联.这样我就不需要编写任何JPQL查询来检索客户或已下达给定订单的客户的所有订单.缺点是增加了维护双向关联的复杂性.

因此,我没有看到关于是否必须使用单向关联或双向关联是否"正确"的明确论据.换句话说,在我看来,这一切都归结为个人偏好和模特的设计者/实施者的品味.

我是对的还是有规则可以确定给定关联的正确方向性?

orm entity-relationship hibernate jpa

14
推荐指数
1
解决办法
2589
查看次数

使用hibernate-entitymanager时是否有必要始终排除cglib?

浪费了大量时间配置我的项目,最后发现我必须从依赖项中排除cglib:

<dependencies>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.6.4.Final</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.6.4.Final</version>
        <exclusions>
            <exclusion>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
            </exclusion>
            <exclusion>
                <groupId>cglib</groupId>
                <artifactId>cglib-nodep</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

是否有必要始终排除cglib?为什么不默认排除?更糟糕的是,为什么官方Hibernate文档中没有任何关于此的说法呢?

hibernate

6
推荐指数
0
解决办法
697
查看次数

标签 统计

hibernate ×2

entity-relationship ×1

jpa ×1

orm ×1