Hibernate支持JPA注解的jar包

JPA全称: Java Persistence API

JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。

使用注解的形式进行配置可以代替实体类的 *.hbm.xml 的映射配置文件,但仍需在 hibernate.cfg.xml 配置文件中进行实体类的注册

实例:class班级、student学生、project学科。

 配置一对多与多对一、多对多。

学生实体类 Student.java

package com.pojo;

import java.util.Date;
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.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name="student_info",schema="C##java06")
public class Student {
@Id//表明这个字段就是主键
@GeneratedValue(generator="incre")
@GenericGenerator(name="incre",strategy="increment")
@Column(name="student_id")
int studentId; @Column(name="student_name")
String studentName; @Column(name="student_Sex")
String studentSex;
@Column(name="student_age")
int studentAge;
// @Column(name="class_Id")
// int classId;
@ManyToOne(cascade=CascadeType.REFRESH,fetch=FetchType.EAGER)
@JoinColumn(name="class_id")
ClassInfo classinfo;
@Column(name="birthday")
Date birthday;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="stu_project")
Set<ProjectInfo> projects; public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getStudentSex() {
return studentSex;
}
public void setStudentSex(String studentSex) {
this.studentSex = studentSex;
}
public int getStudentAge() {
return studentAge;
}
public void setStudentAge(int studentAge) {
this.studentAge = studentAge;
}
// public int getClassId() {
// return classId;
// }
// public void setClassId(int classId) {
// this.classId = classId;
// }
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
} public ClassInfo getClassinfo() {
return classinfo;
} public void setClassinfo(ClassInfo classinfo) {
this.classinfo = classinfo;
} public Set<ProjectInfo> getProjects() {
return projects;
} public void setProjects(Set<ProjectInfo> projects) {
this.projects = projects;
} public Student() {
} public Student(int studentId, String studentName, String studentSex, int studentAge, ClassInfo classinfo, Date birthday) {
this.studentId = studentId;
this.studentName = studentName;
this.studentSex = studentSex;
this.studentAge = studentAge;
// this.classId = classId;
this.classinfo = classinfo;
this.birthday = birthday;
} }

班级实体类ClassInfo.java

package com.pojo;

import java.util.Date;
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.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; @Entity
@Table(name="class_info",schema="JAVA")
public class ClassInfo {
@Id//表明这个字段就是主键
@GeneratedValue(generator="incre")
@GenericGenerator(name="incre",strategy="increment")
@Column(name="class_id")
// @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CUST_SEQ")//使用序列的方式维护主键
int classId; @Column(name="class_name")
String className; @Column(name="create_time")
Date createTime; @Column(name="status")
String status; @OneToMany(mappedBy="classinfo",cascade=CascadeType.ALL ,fetch=FetchType.EAGER)
Set<Student> stus; public ClassInfo() {
} public ClassInfo(int classId, String className, Date createTime, String status) {
this.classId = classId;
this.className = className;
this.createTime = createTime;
this.status = status;
} public int getClassId() {
return classId;
}
public void setClassId(int classId) {
this.classId = classId;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
} public Set<Student> getStus() {
return stus;
} public void setStus(Set<Student> stus) {
this.stus = stus;
} }

科目实体类ProjectInfo.java

package com.pojo;

import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; @Entity
@Table(name="project_info",schema="JAVA")
public class ProjectInfo {
@Id//表明这个字段就是主键
@GeneratedValue(generator="incre")
@GenericGenerator(name="incre",strategy="increment")
@Column(name="project_id")
int projectid; @Column(name="project_name")
String projectname; @ManyToMany(mappedBy="projects")
Set<Student> stus; public int getProjectid() {
return projectid;
}
public void setProjectid(int projectid) {
this.projectid = projectid;
}
public String getProjectname() {
return projectname;
}
public void setProjectname(String projectname) {
this.projectname = projectname;
} }

 配置文件hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--数据库方言 -->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.username">C##java06</property>
<property name="connection.password">java123</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 所有的实体类映射文件要在此处全部注册 -->
<!-- <mapping resource="com/pojo/Student.hbm.xml"/> -->
<!-- 用注解的方式写pojo -->
<mapping class="com.pojo.ClassInfo"/>
<mapping class="com.pojo.Student"/>
<mapping class="com.pojo.ProjectInfo"/>
</session-factory>
</hibernate-configuration>

测试代码

TestRelotion.java
package com.dao;

import java.util.Date;
import java.util.HashSet;
import java.util.List; import com.pojo.ClassInfo;
import com.pojo.ProjectInfo;
import com.pojo.Student; public class TestRelotion {
public static void main(String[] args) {
IStudentDAO stuDAO = new StudentDAO();
// List<Student> list = stuDAO.queryObjectByHql("from Student");
// for (Student stu : list) {
// System.out.println(stu.getStudentName()+",班级是:"+stu.getClassinfo().getClassName()+"开班时间:"+stu.getClassinfo().getCreateTime());
// }
//
IClassInfoDAO cdao = new ClassInfoDAO();
// List<ClassInfo> cs = cdao.queryObjectBySql("select * from Class_Info a where a.class_Id=1",ClassInfo.class);
// ClassInfo c= cs.get(0);
// System.out.println(c.getClassName());
// for (Student stu : c.getStus()) {
// System.out.println(stu.getStudentName()+"\t"+stu.getBirthday());
// } //新增学员
// ClassInfo c = new ClassInfo(2, null, null, null);
// Student stu = new Student(0,"测试新增","1",20,c,new Date());
// stuDAO.saveObject(stu); //删除学员
// Student stu = new Student();
// stu.setStudentId(13);
// stuDAO.delObject(stu); //修改学员
// List<Student> stus = stuDAO.queryObjectByHql("from Student a where a.studentId=1");
// Student stu = stus.get(0);
// stu.setStudentName("谢娜");
// stu.setClassinfo(new ClassInfo(1,null,null,null));
// stuDAO.updateObject(stu); //删除班级
// ClassInfo c = new ClassInfo(3, null, null, null);
// cdao.delObject(c); //给学员选课
//给学员新增选课
//给学员删除选课
//查询学员选了哪些课
//查询课程被哪些学员选中
List<Student> stus = stuDAO.queryObjectByHql("from Student a where a.studentId=1");
Student stu = stus.get(0);
//stu.setProjects(projects); IProjectInfoDAO projectDAO = new ProjectInfoDAO();
// List<ProjectInfo> plist = projectDAO.queryObjectByHql("from ProjectInfo");
// stu.setProjects(new HashSet(plist));
// stuDAO.updateObject(stu); // for (ProjectInfo p : stu.getProjects()) {
// System.out.println(p.getProjectname());
// }
}
}

附:

  常用JPA注解

常用:
@Entity: @Table(name="表名",schema="数据库名"):表明这是一个实体类。一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话, @Table可以省略 @Id:表示该属性为主键。 @Column:如果字段名与列名相同,则可以省略。 @GeneratedValue:JPA通用策略生成器
(strategy = GenerationType.SEQUENCE,generator = “repair_seq”):表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq。
TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:主键由数据库自动生成(主要是自动增长型)
AUTO:主键由程序控制。 @GenericGenerator:hibernate主键策略生成器
@GenericGenerator注解配合 @GeneratedValue一起使用, @GeneratedValue注解中的"generator"属性要与 @GenericGenerator注解中name属性一致,strategy属性表示hibernate的主键生成策略 @OneToOne、 @OneToMany、 @ManyToOne:对应hibernate配置文件中的一对一,一对多,多对一,有主从关系。
eg: @OneToMany(mappedBy="classinfo",cascade=CascadeType.ALL ,fetch=FetchType.EAGER)
fetch取值:
FetchType.EAGER 表示主类被加载时加载,
FetchType.LAZY 后者表示被访问时才会加载。
cascade取值:
CascadeType.PERSIST(级联新建),
CascadeType.REMOVE(级联删除),
CascadeType.REFRESH(级联刷新),
CascadeType.MERGE(级联更新),
CascadeType.ALL(选择全部)。 @JoinColumn(name=”loginId”):一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。 其他:
@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1):name为sequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致。 @Transient:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。
如果一个属性并非数据库表的字段映射,就务必将其标示为 @Transient,否则,ORM框架默认其注解为 @Basic。
@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载方式 @JsonIgnore:作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。 @MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。 @NoRepositoryBean:一般用作父类的repository,有这个注解,spring不会去实例化该repository。

  

三。Hibernate 注解形式的更多相关文章

  1. Hibernate注解映射联合主键的三种主要方式

    今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException ...

  2. 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目

    研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...

  3. Hibernate注解----类级别注解以及属性注解详解----图片版本

    这篇文章是我在慕课网上学习Hibernate注解的时候进行手机以及整理的笔记. 今天把它分享给大家,希望对大家有用.可以进行收藏,然后需要的时候进行对照一下即可.这样能起到一个查阅的作用. 本文主要讲 ...

  4. Hibernate注解使用以及Spring整合

    Hibernate注解使用以及Spring整合 原文转自:http://wanqiufeng.blog.51cto.com/409430/484739 (1) 简介: 在过去几年里,Hibernate ...

  5. Spring 通过XML配置文件以及通过注解形式来AOP 来实现前置,环绕,异常通知,返回后通知,后通知

    本节主要内容: 一.Spring 通过XML配置文件形式来AOP 来实现前置,环绕,异常通知     1. Spring AOP  前置通知 XML配置使用案例     2. Spring AOP   ...

  6. Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式

    ①纯Hibernate开发: 当你在Bean中写入注解后,需要告诉hibernate哪些类使用了注解. 方法是在hibernate.hbm.xml文件中配置 <!DOCTYPE hibernat ...

  7. [Hibernate] 注解映射例子

    Hibernate 注解(Hibernate Annotation) 是一种比较新的方式,通过在 java 简单类增加注解,来声明 java 类和数据库表的映射,作用和 xml 文件相似.hibern ...

  8. Hibernate注解与JPA

    Hibernate注解与JPA - charming的专栏 - CSDN博客http://blog.csdn.net/zxc123e/article/details/51499652 之前记录的一些东 ...

  9. Hibernate注解开发、注解创建索引

    1.注解的目的 简化繁琐的ORM映射文件(*.hbm)的配置 2.JPA和hibernate的关系 JPA:java persistence API,JPA注解是JavaEE的标准和规范. 两者的关系 ...

随机推荐

  1. 【转】Python爬取AES加密的m3u8视频流的小电影并转换成mp4

    最近发现一个视频网站,准备去爬取得时候,前面很顺利利用fiddler抓包获取网站的post数据loads为python字典数据,分析数据就能发现每个视频的连接地址就在其中, 发现这些都是m3u8文件流 ...

  2. 一分钟上手artTemplate

    一分钟上手artTemplate artTemplate是腾讯开源的前端模版引擎.之前做hue二次开发,只接触过用python写的mako模版引擎,所以之前对前端模版引擎了解不是很多. 这次因为pm叫 ...

  3. 经典排序算法 — C#版本(中)

    归并排序比较适合大规模得数据排序,借鉴了分治思想. 归并排序原理 自古以来,分久必合合久必分. 我们可以这样理解归并排序,分-分到不能分为止,然后合并. 使用递归将问题一点一点分解,最后进行合并. 分 ...

  4. IDEA设置热部署

    1.点击File找到Settings打开. 1.2:找到Compiler将 Build project automatically   勾选 2.使用快捷键 Ctrl+Shift+A    搜索 re ...

  5. Identity Server 4 预备知识 -- OpenID Connect 简介

    我之前的文章简单的介绍了OAuth 2.0 (在这里: https://www.cnblogs.com/cgzl/p/9221488.html), 还不是很全. 这篇文章我要介绍一下 OpenID C ...

  6. Python:游戏:扫雷(附源码)

    这次我们基于 pygame 来做一个扫雷,上次有园友问我代码的 python 版本,我说明一下,我所有的代码都是基于 python 3.6 的. 先看截图,仿照 XP 上的扫雷做的,感觉 XP 上的样 ...

  7. 使用 EOLINKER 进行接口测试的最佳路径 (下)

    本文为 <使用 EOLINKER 进行接口测试的最佳路径> 下半部分文章,主要介绍测试脚本如何执行和报告生成,以及测试项目人员如何协作.还没看过上篇文章请戳 使用 EOLINKER 进行接 ...

  8. Python 为什么要使用描述符?

    学习 Python 这么久了,说起 Python 的优雅之处,能让我脱口而出的, Descriptor(描述符)特性可以排得上号. 描述符 是Python 语言独有的特性,它不仅在应用层使用,在语言的 ...

  9. 【Oracle学习笔记】定时任务(dbms_job)

    一.概述 Oralce中的任务有2种:Job和Dbms_job,两者的区别有: 1.  jobs是oracle数据库的对象, dbms_jobs只是jobs对象的一个实例, 就像对于tables, e ...

  10. git clone 指定分支

    使用Git下载指定分支命令为:git clone -b 分支名仓库地址 克隆asp.net core 2.1.6版本 git clone -b 2.1.6 https://github.com/asp ...