`
蔡尧东
  • 浏览: 34209 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

hibernate @MappedBy

阅读更多
还是inverse好用.

一个双向关系的反向端(被拥有方)(如:DepartmentInfo)必须是通过使用OneToOne,OneToMany或ManyToMany注解的mappedBy元素指向其拥有方(如:UserInfo)。该mappedBy元素指定的实体(关系的所有者)的属性或字段(如:UserInfo的字段departmentInfo)。
example:
@Entity
@Table(name = "userInfo", schema = "dbo", catalog = "oa", uniqueConstraints = @UniqueConstraint(columnNames = "name"))
public class UserInfo implements java.io.Serializable {
private Integer userId;

	private DepartmentInfo departmentInfo;
//other field

@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "departmentId", nullable = false)
	public DepartmentInfo getDepartmentInfo() {
		return this.departmentInfo;
	}

//other getter setter
}

@Entity
@Table(name = "departmentInfo", schema = "dbo", catalog = "oa")
public class DepartmentInfo implements java.io.Serializable {
private Integer departmentId;
private Set<UserInfo> userInfos = new HashSet<UserInfo>(0);
//other field
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "departmentInfo")
	public Set<UserInfo> getUserInfos() {
		return this.userInfos;
	}
//other getter setter
}


一个双向关系的反向端(被拥有方)必须是通过使用OneToOne,OneToMany或ManyToMany注解的mappedBy元素指向其拥有方。该mappedBy元素指定的实体(关系的所有者)的属性或字段。
换句话讲:双向关系的拥有方默认是指向被拥有方的,这样默认是不需要mappedBy元素来指定.同时这样的默认会再被拥有方使用mappedBy元素后失效(即由mappedBy指定).

在 one-to-many / many-to-one的双向的关系中many方必须是关系的所有方,因此mappedBy元素不能在many-to-one中使用(指明)(规定).

对于一对一的双向关系,拥有方是(与...相一致)包含相应的外键的一方。

对于many to many的双向关系的双方都可以是拥有方。

mappedBy跟JoinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被拥有方。mappedBy这方定义的JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表;

又糊涂了
分享到:
评论
1 楼 shyang 2012-05-31  
 

相关推荐

    Hibernate 注解大全

    @OneToMany(mappedBy = "user", fetch = FetchType.LAZY) private List&lt;Order&gt; orders; ``` 9. `@ManyToMany`: 表示多对多关系,通常需要通过中间表进行映射。 ```java @ManyToMany @JoinTable(name = "user_roles...

    Hibernate关联映射-one to one单向外键关联

    在这里,`mappedBy`属性指明了关联的反向字段,而`@JoinColumn`则定义了外键列的名称。 在实际开发中,我们还需要注意以下几点: 1. **级联操作**:`CascadeType`决定了当操作`User`时,是否同时对`Account`进行...

    mappedBy属性:one2many

    `mappedBy`属性是Hibernate中用于定义关联关系的一个关键元素,尤其是在处理双向关联的一对多关系时。通常,一对多关系意味着一个实体(例如"部门")可以有多个关联的实体(例如"员工")。在这个场景中,部门是一方...

    hibernate 关联映射(二) one to one(单向)

    在这个例子中,`mappedBy`属性在`Passport`实体中指定,表示`Person`实体拥有对`Passport`的引用。这样,当我们操作`Person`时,可以直接获取到关联的`Passport`。 ### 三、外键管理 在一对一关联中,外键通常存在...

    HIBERNATE 一对多 onetomany

    在`@OneToMany`注解中,`mappedBy`属性指定了子实体中的反向引用属性,`cascade`属性用于指定级联操作,`orphanRemoval`为是否删除未被任何父实体引用的子实体。 2. **子实体类**:子实体类(例如`Course`)中需要...

    Hibernate注解 关联关系映射注解.docx

    本篇文章将详细探讨在Hibernate中如何使用注解来处理各种关联关系,特别是`mappedBy`属性的用法。 首先,`@OneToMany`注解用于表示一对多的关联关系,比如一个班级可以有多个学生。在单向关联中,我们通常在拥有...

    hibernate对象三状态及OneToOne&OneToMany&ManyToMany

    mappedBy属性表示Profile实体是关系的拥有者,而JoinColumn注解用于指定外键列名。 三、一对多(OneToMany)关系映射 一对多关系意味着一个实体可以与多个其他实体相关联。例如,一个用户可以有多个订单: ```...

    hibernate 关系注解

    双向一对一关系需要在两个实体类中都使用`@OneToOne`,一方使用`mappedBy`属性引用另一方的属性。例如: ```java // 在User类中 @OneToOne(mappedBy="user") private Profile profile; // 在Profile类中 @...

    hibernate的表关联操作-hibernate02

    @OneToOne(mappedBy = "person") private Address address; } @Entity public class Address { @OneToOne @JoinColumn(name = "person_id") private Person person; } ``` 2. **一对多关联**:如果一个实体类...

    hibernate各种常用关联关系的基本配置

    配置方式通常通过`@OneToOne`注解实现,可以设置`mappedBy`属性来指定在另一个实体中的反向关联字段。 ```java @Entity public class User { @OneToOne(mappedBy = "user") private Profile profile; } @Entity ...

    hibernate实体系注解

    `mappedBy`属性指定了关联的反向字段,即`Child`类中的`parent`字段。而`@ManyToOne`注解在`Child`类的`parent`字段上,表示一个子实体对应一个父实体。 **三、多对一关系映射** 多对一关系与一对多相反,一个实体...

    Hibernate权限管理例子

    @ManyToMany(mappedBy = "users") private Set&lt;Role&gt; roles; // getter和setter方法 } @Entity public class Role { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private ...

    Hibernate实体关联速查表

    这可以通过`@OneToOne`注解实现,可配置`mappedBy`属性来指定关联的反向字段。例如: ```java @Entity public class User { @OneToOne(mappedBy = "user") private Profile profile; } @Entity public class ...

    Hibernate 3 注解技术讲解

    @ManyToMany(mappedBy = "students") private Set&lt;Course&gt; courses; // ... } ``` ### 4. 其他注解 除了上述注解,Hibernate 3还提供了更多的注解,如`@Temporal`(处理日期时间类型)、`@Enumerated`(枚举...

    hibernate5--3.映射关系

    @ManyToMany(mappedBy = "users") private Set&lt;Role&gt; roles; } @Entity public class Role { @ManyToMany @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "role_id"), ...

    Hibernate一对一,一对多,多对多实例

    @OneToOne(mappedBy = "student") private IdCard idCard; } @Entity public class IdCard { @OneToOne @PrimaryKeyJoinColumn private Student student; } ``` 2. **一对多关联**: 一对多关联常出现...

    hibernate系列(一)hibernate入门

    @OneToMany(mappedBy = "user") private List&lt;Order&gt; orders; // ... } ``` 以上就是Hibernate入门的基本知识,通过这些,你可以开始构建自己的ORM模型,并进行数据库操作。随着深入学习,你会发现Hibernate提供...

    HibernateDemo(hibernate基本用法演示)

    9. **延迟加载(Lazy Loading)**:通过 `@OneToMany(mappedBy = "..." fetch = FetchType.LAZY)` 可以实现懒加载,只有在真正需要时才会加载关联的对象,避免了数据冗余。 10. **事件监听**:可以注册事件监听器,...

    Hibernate关于注解的一对多,多对多,一对一

    你可以指定`mappedBy`属性来指定子类中的反向关联字段,这通常是多端的`@ManyToOne`注解的引用字段。 2. **@JoinColumn** 或 **@JoinTable**:对于一端,我们通常需要使用`@JoinColumn`注解来指定外键所在的列,...

    hibernate多对多关联映射

    `mappedBy`属性则指定反向关联的字段,表明`Course`实体中的`students`列表是主关联方。 三、多对多关联的增删改查 1. 插入关联 在添加关联时,可以通过直接添加对象到对方的集合属性来完成。例如,为一个学生添加...

Global site tag (gtag.js) - Google Analytics