在一对多和多对一双向关联时:
@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 (?, ?)
相关推荐
在`@OneToMany`注解中,`mappedBy`属性指定了子实体中的反向引用属性,`cascade`属性用于指定级联操作,`orphanRemoval`为是否删除未被任何父实体引用的子实体。 2. **子实体类**:子实体类(例如`Course`)中需要...
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) private List<Post> posts; // getters and setters } @Entity public class Post { @Id private Long id; @ManyToOne ...
@OneToMany(mappedBy = "user") private List<Order> orders; } @Entity public class Order { @Id private Long id; @ManyToOne @JoinColumn(name = "user_id") private User user; } ``` 在Order实体中...
@OneToMany(mappedBy = "department") private List<User> users; } ``` 以上是关于Hibernate中One-to-Many和Many-to-One关联配置的基本知识。实际应用中,还需要考虑性能、并发、事务等因素,进行合理的优化和...
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY) private List<Order> orders; ``` 9. `@ManyToMany`: 表示多对多关系,通常需要通过中间表进行映射。 ```java @ManyToMany @JoinTable(name = "user_roles...
总结,`@OneToMany`和`@ManyToOne`是Hibernate中处理关联关系的重要注解,它们帮助我们在Java代码中轻松管理数据库的一对多和多对一关系。理解并熟练运用这两个注解,能够极大地提高开发效率,简化数据操作,同时也...
- **示例**:假设有一个班级类(`Class`)和一个学生类(`Student`),其中`Student`类中定义了`@ManyToOne`类型的`class`字段,则`Class`类中可以使用`@OneToMany(mappedBy = "class")`来定义一对多关系。...
@OneToMany(mappedBy="organization") private List<Employee> employees; // 在Employee类中 @ManyToOne @JoinColumn(name="orgid") private Organization organization; ``` 9. **多对多关联映射(单向和...
总结来说,`@OneToMany`注解在Java Hibernate中用于建立一对多的关联关系,通过设置`mappedBy`、`cascade`和`orphanRemoval`等参数,可以方便地管理这种关系,实现对象与数据库的同步。同时,理解并熟练掌握这种关系...
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY) private List<Child> children; ``` **五、总结** 使用Hibernate的注解方式,我们可以更直观地在Java代码中定义实体类和它们之间的关系,减少了XML配置...
@OneToMany(mappedBy = "parent") private Set<Child> children; ``` `mappedBy`属性指定了在子类中引用父类的属性名称。 3. **在子类中添加@ManyToOne注解**:在`Child`类中,为`Parent`对象添加`@ManyToOne`...
举个例子,假设我们有一个学生实体类(Student)和一个班级实体类(Class),在Class中我们可以声明一个`@OneToMany(mappedBy = "class")`的List,这表示学生的班级属性(如`class`)将负责维护关联关系。...
@OneToMany(mappedBy = "teacher") private List<Student> students; } @Entity public class Student { @ManyToOne @JoinColumn(name = "teacher_id") private Teacher teacher; } ``` ### 多对多关系 多对...
@OneToMany(mappedBy = "department") private List<Employee> employees; } @Entity public class Employee { @Id private Long id; @ManyToOne @JoinColumn(name = "department_id") private Department...
@OneToMany(mappedBy = "department") private List<Employee> employees; } @Entity public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne @...
* 双向一对多映射:在多端使用 @ManyToOne 和 @JoinColumn 注解,在一端使用 @OneToMany 和 mappedBy 注解,指定关联属性名。 * 双线一对一映射:基于外键使用 @OneToOne 注解,基于主键使用 Hibernate 的扩展注解。...
1. 在父类(“一”的一方)的映射文件或注解中,定义`@OneToMany`注解,指定子类的实体类和集合类型,并设置`mappedBy`属性,指明子类中引用父类的字段。 ```java @Entity public class Parent { @OneToMany...
配置时使用`@OneToMany`注解,可设置`mappedBy`、`fetch`(默认为EAGER,可改为LAZY实现懒加载)和`cascade`(级联操作)等属性。 ```java @Entity public class User { @OneToMany(mappedBy = "user", cascade = ...