`
KuangYeYaZi
  • 浏览: 56417 次
文章分类
社区版块
存档分类
最新评论

Hibernate @OneToMany的mappedBy和@JoinColumn总结

 
阅读更多

在一对多和多对一双向关联时:

  @OneToMany(cascade=ALL)

  // @JoinColumn(name="s_class") //如果一端设置了@JoinColumn,那么它的name和多端的@joinColumn的name是一样的。

  //但如果设置的是mappedBy的话,那么它的值和多端的getCla的"cla"是一样的。

  public Set<Student> getStudents() {

  return students;

  }

  @ManyToOne

  @JoinColumn(name="s_class")

  public SClass getCla() {

  return cla;

  }

  下面是在一端设置各自属性时输出的SQL语句:

  mappedBy:

  Hibernate: insert into SClass (name) values (?)

  Hibernate: insert into Student (s_class, name) values (?, ?)

  Hibernate: insert into Student (s_class, name) values (?, ?)

  @JoinColumn:

  Hibernate: insert into SClass (name) values (?)

  Hibernate: insert into Student (s_class, name) values (?, ?)

  Hibernate: insert into Student (s_class, name) values (?, ?)

  Hibernate: update Student set s_class=? where id=?

  Hibernate: update Student set s_class=? where id=?

  我发现mappedBy和@JoinColumn还有一个区别是,在一端设置了@JoinColumn的时候,主控制方在一端,

  也就是在一端set多端的时候,数据库会为你保存级联关系(在多端指向一端的外键设置值了)。

  SClass c=new SClass();

  c.getStudents()。add(s);

  c.getStudents()。add(s1);

  session.save(c);

  这样就行了。但还是建议设置mappedBy让多端设置这种关联比较好。

  两者都不用的时候会为OneToMany新建一个关联表SClass_Student.

  Hibernate: insert into SClass (name) values (?)

  Hibernate: insert into Student (s_class, name) values (?, ?)

  Hibernate: insert into Student (s_class, name) values (?, ?)

  Hibernate: insert into SClass_Student (SClass_id, students_id) values (?, ?)

  Hibernate: insert into SClass_Student (SClass_id, students_id) values (?, ?)

 

http://itlab.idcquan.com/Java/Hibernate/963761.html

分享到:
评论

相关推荐

    HIBERNATE 一对多 onetomany

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

    Hibernate- oneToMany using annotation

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) private List&lt;Post&gt; posts; // getters and setters } @Entity public class Post { @Id private Long id; @ManyToOne ...

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

    @OneToMany(mappedBy = "user") private List&lt;Order&gt; orders; } @Entity public class Order { @Id private Long id; @ManyToOne @JoinColumn(name = "user_id") private User user; } ``` 在Order实体中...

    Hibernate one to many(many to one) 配置

    @OneToMany(mappedBy = "department") private List&lt;User&gt; users; } ``` 以上是关于Hibernate中One-to-Many和Many-to-One关联配置的基本知识。实际应用中,还需要考虑性能、并发、事务等因素,进行合理的优化和...

    Hibernate 注解大全

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

    Hibernate 注解一对多,多对一

    总结,`@OneToMany`和`@ManyToOne`是Hibernate中处理关联关系的重要注解,它们帮助我们在Java代码中轻松管理数据库的一对多和多对一关系。理解并熟练运用这两个注解,能够极大地提高开发效率,简化数据操作,同时也...

    Hibernate注释

    - **示例**:假设有一个班级类(`Class`)和一个学生类(`Student`),其中`Student`类中定义了`@ManyToOne`类型的`class`字段,则`Class`类中可以使用`@OneToMany(mappedBy = "class")`来定义一对多关系。...

    hibernate 关系注解

    @OneToMany(mappedBy="organization") private List&lt;Employee&gt; employees; // 在Employee类中 @ManyToOne @JoinColumn(name="orgid") private Organization organization; ``` 9. **多对多关联映射(单向和...

    HIbernate-OneToMany:HIbernate-OneToMany Annotations 在实体之间具有 PKFK 关系

    总结来说,`@OneToMany`注解在Java Hibernate中用于建立一对多的关联关系,通过设置`mappedBy`、`cascade`和`orphanRemoval`等参数,可以方便地管理这种关系,实现对象与数据库的同步。同时,理解并熟练掌握这种关系...

    hibernate实体系注解

    @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY) private List&lt;Child&gt; children; ``` **五、总结** 使用Hibernate的注解方式,我们可以更直观地在Java代码中定义实体类和它们之间的关系,减少了XML配置...

    hibernate双向一对多关联映射(注解版)

    @OneToMany(mappedBy = "parent") private Set&lt;Child&gt; children; ``` `mappedBy`属性指定了在子类中引用父类的属性名称。 3. **在子类中添加@ManyToOne注解**:在`Child`类中,为`Parent`对象添加`@ManyToOne`...

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

    举个例子,假设我们有一个学生实体类(Student)和一个班级实体类(Class),在Class中我们可以声明一个`@OneToMany(mappedBy = "class")`的List,这表示学生的班级属性(如`class`)将负责维护关联关系。...

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

    @OneToMany(mappedBy = "teacher") private List&lt;Student&gt; students; } @Entity public class Student { @ManyToOne @JoinColumn(name = "teacher_id") private Teacher teacher; } ``` ### 多对多关系 多对...

    Hibernate 关联映射

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

    hibernate表关联实例

    @OneToMany(mappedBy = "department") private List&lt;Employee&gt; employees; } @Entity public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne @...

    Hibernate 注解映射

    * 双向一对多映射:在多端使用 @ManyToOne 和 @JoinColumn 注解,在一端使用 @OneToMany 和 mappedBy 注解,指定关联属性名。 * 双线一对一映射:基于外键使用 @OneToOne 注解,基于主键使用 Hibernate 的扩展注解。...

    hibernate one-to-many 单/双向关联映射配置心得

    1. 在父类(“一”的一方)的映射文件或注解中,定义`@OneToMany`注解,指定子类的实体类和集合类型,并设置`mappedBy`属性,指明子类中引用父类的字段。 ```java @Entity public class Parent { @OneToMany...

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

    配置时使用`@OneToMany`注解,可设置`mappedBy`、`fetch`(默认为EAGER,可改为LAZY实现懒加载)和`cascade`(级联操作)等属性。 ```java @Entity public class User { @OneToMany(mappedBy = "user", cascade = ...

Global site tag (gtag.js) - Google Analytics