1、数据库结构:
2、实体代码:
teacher类:
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name = "t_teacher")
public class Teacher {
@Id
Integer teacherId;
String teacherName;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
//CascadeType参考这里不建议将CascadeType类型设置为ALL
@JoinTable(name = "t_teacher_student", joinColumns = { @JoinColumn(name = "teacherid") }, inverseJoinColumns = { @JoinColumn(name = "studentid") })
//@JoinTable参考:
Set<Student> students = new HashSet<Student>(0);
public Integer getTeacherId() {
return teacherId;
}
public void setTeacherId(Integer teacherId) {
this.teacherId = teacherId;
}
public String getTeacherName() {
return teacherName;
}
public void setTeacherName(String teacherName) {
this.teacherName = teacherName;
}
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
public void addStudent(Student student ) {
this.students.add(student);
}
}
Student类:
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name = "t_student")
public class Student {
@Id
Integer studentId;
String studentName;
@ManyToMany(mappedBy = "students", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
Set<Teacher> teachers = new HashSet<Teacher>(0);
public Integer getStudentId() {
return studentId;
}
public void setStudentId(Integer studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public Set<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}
public void addTeachers(Teacher teacher) {
this.teachers.add(teacher);
}
}
测试代码:
import org.hibernate.Session;
import org.hibernate.Transaction;
import commons.utils.HibernateUtil;
public class Test {
public static void main(String[] args) {
Session session = HibernateUtil.getCurrentSession();
session.getTransaction().begin();
Student s1, s2;
s1 = new Student();
s1.setStudentId(new Integer(1));
s1.setStudentName("studentname1");
s2 = new Student();
s2.setStudentId(new Integer(2));
s2.setStudentName("studentname2");
Teacher t1, t2;
t1 = new Teacher();
t1.setTeacherId(new Integer(1));
t1.setTeacherName("teacherName1");
t2 = new Teacher();
t2.setTeacherId(new Integer(2));
t2.setTeacherName("teacherName2");
t1.addStudent(s1);
t1.addStudent(s2);
t2.addStudent(s1);
t2.addStudent(s2);
session.save(s1);
session.save(s2);
session.save(t1);
session.save(t2);
session.getTransaction().commit();
session.close();
}
}
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.password">MY</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:oracle</property>
<property name="hibernate.connection.username">MY</property>
<property name="hibernate.default_schema">MY</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="hibernate.hbm2ddl.auto">create-drop</property>
<property name="hibernate.show_sql">true</property>
<mapping class="ss.Student" />
<mapping class="ss.Teacher" />
</session-factory>
</hibernate-configuration>
HibernateUtil 辅助类:
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("初始化SessionFactory失败!" + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session getCurrentSession() throws HibernateException {
Session s = (Session) session.get();
// 当原Session为空或已关闭时,打开一个新的Session
if (s == null || !s.isOpen()) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null) {
s.close();
}
}
}
分享到:
相关推荐
Hibernate之JPA注解
JPA和Hibernate的关系,JPA:Java Persistence APIJPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
NULL 博文链接:https://prowl.iteye.com/blog/519618
现在引入了一组全新的 API:Java Persistence API JPA 以允许开发者管理 Java EE(甚至 SE)应用程序中的关系数据 另外 Sun 声称 Java Persistence API 表现了一些 Hibernate TopLink(二者都会在稍后讨论) JDO ...
Spring Hibernate JPA与常用JAR包详解,非常全面,将每个包的依赖包也有详细的说明
最终,像Hibernate这样的ORM框架开始在开发领域得到认可,并且对它们的需求也在增加,因此JCP开始制定JPA规范。 像Servlet和JSP一样,JPA是一个规范。 实际运行JPA需要参考实现(RI)。 JPA参考实现有几种选择。 ...
hibernate的中关系映射分为一对一、一对多、多对一、多对多,其中有单双向之分。而一对一还有主键和外键区分。一共是九种。分别用xml配置文件和annotation实现。annotation的版本没有写测试程序,见谅。
aba-hibernate-jpa-v1 使用 hibernate 4、JPA 2 和 Spring 3 的项目。该项目旨在验证实体之间的关系。 使用的数据源是 H2 类型。
Hibernate 实现了 JPA,即 Java 中对象/关系持久性的标准 API,而且还提供了一组超出规范的广泛功能和 API。 请参阅Hibernate.org了解更多信息。 Hibernate 使用Jenkins和GitHub Actions 来满足其 CI 需求。看 ...
示例应用程序演示了如何将Hibernate用作Spring Data JPA的JPA提供程序。 当前演示了以下概念: 概念 描述 看 Spring Data JPA存储库 使用再次执行操作关系数据库 直接EntityManager访问 直接访问JPA ...
实用JPA开发指南实用JPA开发指南实用JPA开发指南实用JPA开发指南实用JPA开发指南实用JPA开发指南实用JPA开发指南实用JPA开发指南
一个示例AngularJS应用程序,它使用基于Hibernate / JPA的Spring Security保护的Jersey REST后端。 关于 这些项目的目的是演示AngularJS应用程序使用的简单REST接口的Java实现。 涵盖以下主题: 一个关系数据库,...
CRUD-HibernateJPA JPA: Java Persistence API是标准的Java语言API,它描述了数据持久性框架的通用接口。 JPA是Java规范,指示应如何实现ORM框架。 创建它是为了使这些解决方案标准化。 Hibernate: Hibernate是一...
hsqldb-jpa ========== 该项目旨在提供与关系数据库HSQLDB HyperSQL数据库的JPA集成。 本示例使用Hibernate / JPA 4.x 列出待办事项: 建立其他关系
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA支持XML和JDK5.0注解两种元数据的形式。 JPA的总体思想和现有Hibernate、TopLink、...
javafx11-jpa-crud该项目演示了将JavaFX和JPA(Java Persistence API)技术与Hibernate结合使用的桌面应用程序。旨在改善我的逻辑而创建的项目完全是由我开发的,没有任何预先计划。一切都是根据不断出现的需求来...
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA支持XML和JDK5.0注解两种元数据的形式。 JPA的总体思想和现有Hibernate、TopLink、...
Hibernate稳定版(hibernate-release-5.3.23.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。
Spring Data JPA是Spring基于Hibernate...如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便。但是Spring Data JPA框架功能更进一步,为我们做了 一个数据持久层框架几乎能做的任何事情。