`

JPA,在@OneToMany里加入mappedBy属性

阅读更多
JPA,在@OneToMany里加入mappedBy属性避免生成中间表

使用JPA的时候,如果A B两个实体间是一对多,多对一的关系,如果不在@OneToMany里加入mappedBy属性(相当于inverse=”true”)会导致自动生成一个多余的中间表。比如:

 

@Entity

public class A {

    @OneToMany(mappedBy="a")

    public Set<B> bs = new HashSet<B>(0);

}

 
@Entity

public class B {

    @ManyToOne    
    public A a;

}










这样写会只成生成表A和表B,B中会有一个到表A的外键。但是如果不加mappedBy=”a”, 那么就会再生成一张A_B表。


又如:

In Customer class

@OneToMany(cascade=ALL, mappedBy="customer")
public  Set getOrders() { 
	return orders; 
}


In Order class

@ManyToOne
@JoinColumn(name="CUST_ID", nullable=false)
public Customer getCustomer() { 
	return customer; 
}




 


mappedBy="customer"
说明在两个关联的实体Bean中,orders这一端是关系的拥有者,Orders一方的表中生成到关联类的外键
且mappedBy只有在双向关联时,才会使用这个属性
cascade=ALL
说明,当Orders做CRUD操作时,Customer都会进行相应操作

 

 

分享到:
评论
1 楼 Tian.Wang 2010-08-07  

相关推荐

    JPA课程manyToMany OneToMany 等全部测试

    @OneToMany(mappedBy = "department") private List&lt;Employee&gt; employees; } @Entity public class Employee { @ManyToOne @JoinColumn(name = "department_id") private Department department; } ``` 在这里...

    JPA_OneToMany学习教程

    `mappedBy`指定了在子实体中引用父实体的属性名。`fetch`用于指定加载策略,可以是EAGER(即时加载)或LAZY(延迟加载)。`cascade`控制了对子实体的操作是否应该级联到父实体。 4. **@JoinColumn**:在父实体中,...

    JPA学习总结(三)--JPAOneToMany双向关联

    在父实体(拥有一端)上,我们需要使用`@OneToMany`注解,该注解包含两个重要的属性:`mappedBy`和`cascade`。`mappedBy`指定了子实体中用于维护关联的字段或属性,而`cascade`则控制对子实体的操作是否应该级联到父...

    Hibernate- oneToMany using annotation

    `mappedBy`属性指定了关联字段在`Post`实体中,`cascade`属性设为`ALL`意味着在保存、更新或删除`User`时,也会相应地操作`Post`,`orphanRemoval`设为`true`则表示删除用户时,其相关的帖子也会被删除。 在实际...

    Ejb3-OneToMany--Good.rar

    在这里,`mappedBy`属性指定了子实体(Order)中用于建立关联的字段,通常是父实体的引用。 2. **关联类型**:默认情况下,`@OneToMany`的关系是无序的,可以通过`@OrderBy`来指定排序规则。同时,可以设置`...

    jpa-day3-onetomany.zip

    在上述代码中,“mappedBy”属性指定了在Contact实体中哪个字段是外键,而`@JoinColumn`注解则用于指定外键在数据库中的列名。 配置好实体关系后,Spring Data JPA会自动处理关联的查询。例如,当我们想要获取一个...

    jpa的实体映射关系7种

    双方都需要使用`@OneToMany`和`@ManyToOne`注解来定义关系,且`mappedBy`应设置在`@OneToMany`的一侧。 5. **双向多对一**: 相对于双向一对一,这里是一方可以拥有多个另一方实体,但两者都知道这个关系。双方都...

    10_JPA详解_JPA中的一对多双向关联与级联操作.zip

    这里的`mappedBy`属性指定了在另一端的实体字段名,`@JoinColumn`则定义了外键所在的列名。 **双向关联** 在上述例子中,我们定义了一个双向关联,即`Student`能够访问其关联的`Course`列表,同时`Course`也能知道...

    Hibernate 注解一对多,多对一

    1. 在使用`@OneToMany`时,如果没有指定`mappedBy`,那么在父类中需要使用`@JoinColumn`指定外键字段,并且这个字段通常会在数据库中创建一个索引。 2. 当使用`FetchType.LAZY`时,需要确保JPA实现支持懒加载,例如...

    jpa--10.单向一对多

    `mappedBy`属性指定关系的维护端是`Employee`实体,它引用了`Department`实体。 2. **多方实体(例如:Employee)**: ```java @Entity public class Employee { @Id @GeneratedValue(strategy = ...

    JPA中,多个表相关联设定的方法。

    在给出的代码中,`Person`类有一个`Set&lt;Address&gt;`属性,用`@OneToMany(mappedBy="person")`注解,表明`Address`实体通过`person`字段引用`Person`,`mappedBy`属性指定反向关联的属性名。 ```java @OneToMany...

    JPA中的一对多双向关联与级联操作

    `mappedBy`属性在`User`类中指定了关联字段(即`Order`类的`user`字段),`@JoinColumn`注解在`Order`类中定义了外键字段`user_id`。 级联操作不仅可以应用于删除,还可以应用于其他操作,如`PERSIST`(保存)、`...

    jpa-开发21

    在被维护端(one side),我们可以在实体上使用 `@OneToMany` 注解,并通过 `mappedBy` 属性指明它是被维护端。例如: ```java @Entity public class Role { @OneToMany(mappedBy = "role") private List&lt;User&gt; ...

    hibernate常见异常针对于jpa

    - `mappedBy`属性用于指定另一端的关联属性,它决定了关联关系的维护方。如果双方都声明了关联关系,则会导致不必要的数据更新操作。 #### 五、不需要持久化的属性加@Transient 在某些情况下,可能希望将某些属性...

    学习hibernate必读,JPA2新特征和JPA2映射的神秘之旅。

    - **双向关联的注解优化**:如`@OneToMany(mappedBy="...")`,简化了关联的管理。 - **延迟加载(Lazy Loading)增强**:通过引入`FetchType.LAZY`,可以更精细地控制属性的加载时机。 - **查询语言JPA QL的扩展*...

    JPA-4 映射关联关系

    但是,如果双方都需要知道这个关联,我们可以为双方都添加`@ManyToOne`注解,同时在"一"端实体的属性上使用`@OneToMany(mappedBy = "...")`。这样,双方都可以访问关联的实体集合。 5. **双向多对多关联关系...

    spring data jpa

    @OneToMany(mappedBy = "department") private List&lt;User&gt; users; // ... } ``` ### 6. `@Repository` `@Repository` 是 Spring Data JPA 的一个组件注解,用于标记数据访问层的接口。Spring 会自动实现该接口,...

    jpa to many

    在映射时,通常会设置`mappedBy`属性,指定多的一方的属性作为关系的导航字段。此外,JPA提供了多种操作策略,如延迟加载(Lazy Loading)、立即加载(Eager Loading),以及级联操作(Cascade)等。 **级联操作...

    Toplink_JPA注解参考

    @OneToMany(mappedBy = "department") private List&lt;Employee&gt; employees; // ... } @Entity public class Employee { @Id private Long id; @ManyToOne @JoinColumn(name = "DEPARTMENT_ID") private ...

    JPA一对一,一对多,多对多关系映射

    - 可以通过`mappedBy`属性指定被引用方,否则需在双方实体上定义关系。 - `@JoinColumn`注解用于指定外键列名和主键关联。 例如: ```java @Entity public class User { @Id private Long id; @OneToOne(mapped...

Global site tag (gtag.js) - Google Analytics