hibernate.cfg.xml同上 加入Classes 、Student
Classes.java
package com.yulin.hibernate.pojo; import java.util.LinkedHashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @Table(name="class") public class Classes extends Base { @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column private Integer id; @Column private String className; @Column private Integer classNum; // cascade表示级联操作 // CascadeType.MERGE级联更新:若items属性修改了那么order对象保存时同时修改items里的对象。对应EntityManager的merge方法 // CascadeType.PERSIST级联刷新:获取order对象里也同时也重新获取最新的items时的对象。对应EntityManager的refresh(object)方法有效。即会重新查询数据库里的最新数据 // CascadeType.REFRESH级联保存:对order对象保存时也对items里的对象也会保存。对应EntityManager的presist方法 // CascadeType.REMOVE级联删除:对order对象删除也对items里的对象也会删除。对应EntityManager的remove方法 // FetchType.LAZY表示懒加载。对于xxxtoMany时即获得多的一方fetch的默认值是FetchType.LAZY懒加载。对于xxxtoOne时即获得一的一方fetch的默认值是FetchType.EAGER立即加载 // mappedBy="classes"就相当于inverse=true,(mappedBy指定的是不需要维护关系的一端) //请检查orderItems这个属性是否使用了泛型,如:Set. //如果未使用泛型,请在OneToMany注释中使用targetEntity指定元素的类型 @OneToMany(cascade = { CascadeType.ALL}, fetch = FetchType.LAZY ,targetEntity = Student.class,mappedBy="classes") private Set students= new LinkedHashSet(); public Set getStudents() { return students; } public void setStudents(Set students) { this.students = students; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public Integer getClassNum() { return classNum; } public void setClassNum(Integer classNum) { this.classNum = classNum; } }
Student.java
package com.yulin.hibernate.pojo; import java.util.LinkedHashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity @Table public class Student extends Base { public Student(){} @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private Integer id; @Column(name="studentName") private String name; @Column(name="studentAge") private Integer age; // cascade表示级联。CascadeType.REFRESH级联刷新 // optional表示该对象可有可无,它的值为true表示该外键可以为null,它的值为false表示该外键为not null @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER, optional = false) // JoinColumn表示外键的列 @JoinColumn(name="classId") private Classes classes; public Classes getClasses() { return classes; } public void setClasses(Classes classes) { this.classes = classes; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
Test.java
package com.yulin.hibernate.test; import java.util.Date; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import com.yulin.hibernate.pojo.Classes; import com.yulin.hibernate.pojo.Person; import com.yulin.hibernate.pojo.Role; import com.yulin.hibernate.pojo.Student; import com.yulin.hibernate.pojo.Users; public class Test { public static final SessionFactory sessionFactory; static { sessionFactory = new AnnotationConfiguration().configure( "/hibernate.cfg.xml").buildSessionFactory(); } public static final ThreadLocal session = new ThreadLocal(); public static Session currentSession() throws HibernateException { Session s = session.get(); if (s == null) { s = sessionFactory.openSession(); session.set(s); } return s; } public static void closeSession() throws HibernateException { Session s = session.get(); if (s != null) { s.close(); } session.set(null); } public static void delOneToMany(){ Session session=currentSession(); org.hibernate.Transaction tran=session.beginTransaction(); Student student=(Student)session.get(Student.class, 5); session.delete(student); tran.commit(); closeSession(); } public static void addOneToMany(){ Session session=currentSession(); org.hibernate.Transaction tran=session.beginTransaction(); Classes classs= new Classes(); classs.setClassName("1班"); classs.setClassNum(1); Student student = new Student(); student.setName("小李"); student.setAge(12); student.setClasses(classs); Student student1 = new Student(); student1.setName("小娇"); student1.setAge(10); student1.setClasses(classs); classs.getStudents().add(student); classs.getStudents().add(student1); session.save(classs); tran.commit(); closeSession(); } public static void main(String[] args) { addOneToMany(); //delOneToMany(); } }
相关推荐
本篇文章将深入探讨Hibernate中注解的一对多、多对多和一对一关系映射。 ### 一对多关系 在现实生活中,例如一个班级有一个班主任,而班主任可以管理多个学生,这就是典型的“一对多”关系。在Hibernate中,我们...
总结一下,Hibernate的一对多关联映射通过注解方式定义了对象间的关联关系,使得我们在编程时能够以面向对象的方式操作数据,而底层数据库的操作则由Hibernate自动完成。这种方式大大提高了开发效率,同时也降低了...
本文将深入探讨Hibernate中的一对多、多对一、一对一以及多对多四种关系映射的配置实例,帮助开发者更好地理解和运用这些关系。 ### 一对多关系(One-to-Many) 在数据库设计中,一对多关系是最常见的一种关联,...
本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...
`@OneToMany`表示一对多关联,一个实体类可以有多个其他实体类的实例。 ```java @Entity public class Customer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany...
对于"hibernate双向一对多关联映射(注解版)",我们可以按照以下步骤进行: 1. **定义实体类**:首先,我们需要创建两个实体类,例如`Parent`和`Child`。在`Parent`类中,`Child`是一个集合,而在`Child`类中,`...
一对多关联通常通过 `@OneToMany` 和 `@ManyToOne` 注解来实现。 - **@OneToMany**:用于配置父实体与子实体之间的一对多关系。 - **@ManyToOne**:用于配置子实体与父实体之间的一对多关系。 - **targetEntity**:...
本教程将深入探讨如何在Hibernate中使用注解来实现实体类的配置,特别是关注一对多和多对一的关系映射。 **一、Hibernate注解基础** 在Hibernate 3.2之后,引入了注解支持,使得开发者不再需要XML配置文件来定义...
本文将深入探讨Hibernate中的两个关键概念——注解声明的一对多(@OneToMany)和多对一(@ManyToOne)关系,以及如何在实际项目中应用它们。 一、Hibernate注解介绍 Hibernate通过注解简化了Java类与数据库表之间的...
描述部分为空,但我们可以根据标题推测,这篇博客可能详细解释了如何在Hibernate中配置和管理这种一对多双向关联,包括XML配置、注解方式,以及如何在代码中进行操作和查询。 **Hibernate ORM简介** Hibernate是一...
这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,例如一个用户可以有多个订单,一个班级可以有多名学生等。在Hibernate中,这种关系通过在实体类和...
这个注解告诉Hibernate,Employee类中有一个字段与另一个实体类(例如Department)存在一对多的关系。例如: ```java @Entity public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY)...
在`Hibernate`中,我们还可以使用注解来处理关联关系,如`@ManyToOne`, `@OneToMany`, `@OneToOne`和`@ManyToMany`,它们分别对应一对一、一对多、多对一和多对多的关系。例如,一个用户可以有多个订单,那么在订单...
2. **@OneToMany**: 一对多关联,可以指定`mappedBy`属性,表明在另一方实体类中有引用。 3. **@ManyToOne**: 多对一关联,通常与`@JoinColumn`配合使用,指定外键列。 4. **@ManyToMany**: 多对多关联,通常通过...
以下是对"jpa/hibernate继承注解"这一主题的详细说明。 1. **单一表继承(Single Table Inheritance, STI)** 单一表继承是最简单的继承策略,所有的子类信息都存储在一个数据库表中。使用`@Inheritance(strategy ...
本教程将重点讲解如何在Hibernate中实现多对一的映射关系,采用的是注解方式进行配置。 **一、多对一关系** 在数据库设计中,多对一关系表示一个实体可以与另一个实体的多个实例相关联。例如,一个部门可以有多名...
- `@OneToMany`:一对多关联,可通过`mappedBy`指定被关联方,或通过`@JoinColumn`指定关联字段。 - `@ManyToMany`:多对多关联,通常配合`@JoinTable`定义关联表。 5. **继承关系注解**: - `@Inheritance`:...
- **集合类型:** 映射一对多或多对多关系时,使用`@OneToMany`或`@ManyToMany`注解。 - **用cascading实现传播性持久化(Transitive persistence):** 在保存一个实体时自动保存与之关联的实体。 - **关联关系...
3. `@JoinColumn`: 定义一对一或一对多关系中的外键字段,这里用在`@JoinTable`中,表示多对多关系的连接表中外键的属性。 在上述代码中,`Student`实体有一个`courses`集合,它包含了与之关联的所有`Course`实体。...
在本主题中,我们将深入探讨使用Hibernate注解来实现JPA的一对多、多对多和多对一的关系映射。 1. **一对多关系**: 在现实世界中,一个老师可以教多个学生,或者一个班级可以包含多个学生,这就是典型的一对多...