Hibernate支持JPA注解的jar包

JPA全称: Java Persistence API

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

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

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

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

学生实体类 Student.java

  1. package com.pojo;
  2.  
  3. import java.util.Date;
  4. import java.util.Set;
  5.  
  6. import javax.persistence.CascadeType;
  7. import javax.persistence.Column;
  8. import javax.persistence.Entity;
  9. import javax.persistence.FetchType;
  10. import javax.persistence.GeneratedValue;
  11. import javax.persistence.Id;
  12. import javax.persistence.JoinColumn;
  13. import javax.persistence.JoinTable;
  14. import javax.persistence.ManyToMany;
  15. import javax.persistence.ManyToOne;
  16. import javax.persistence.Table;
  17.  
  18. import org.hibernate.annotations.GenericGenerator;
  19. @Entity
  20. @Table(name="student_info",schema="C##java06")
  21. public class Student {
  22. @Id//表明这个字段就是主键
  23. @GeneratedValue(generator="incre")
  24. @GenericGenerator(name="incre",strategy="increment")
  25. @Column(name="student_id")
  26. int studentId;
  27.  
  28. @Column(name="student_name")
  29. String studentName;
  30.  
  31. @Column(name="student_Sex")
  32. String studentSex;
  33. @Column(name="student_age")
  34. int studentAge;
  35. // @Column(name="class_Id")
  36. // int classId;
  37. @ManyToOne(cascade=CascadeType.REFRESH,fetch=FetchType.EAGER)
  38. @JoinColumn(name="class_id")
  39. ClassInfo classinfo;
  40. @Column(name="birthday")
  41. Date birthday;
  42. @ManyToMany(fetch=FetchType.EAGER)
  43. @JoinTable(name="stu_project")
  44. Set<ProjectInfo> projects;
  45.  
  46. public int getStudentId() {
  47. return studentId;
  48. }
  49. public void setStudentId(int studentId) {
  50. this.studentId = studentId;
  51. }
  52. public String getStudentName() {
  53. return studentName;
  54. }
  55. public void setStudentName(String studentName) {
  56. this.studentName = studentName;
  57. }
  58. public String getStudentSex() {
  59. return studentSex;
  60. }
  61. public void setStudentSex(String studentSex) {
  62. this.studentSex = studentSex;
  63. }
  64. public int getStudentAge() {
  65. return studentAge;
  66. }
  67. public void setStudentAge(int studentAge) {
  68. this.studentAge = studentAge;
  69. }
  70. // public int getClassId() {
  71. // return classId;
  72. // }
  73. // public void setClassId(int classId) {
  74. // this.classId = classId;
  75. // }
  76. public Date getBirthday() {
  77. return birthday;
  78. }
  79. public void setBirthday(Date birthday) {
  80. this.birthday = birthday;
  81. }
  82.  
  83. public ClassInfo getClassinfo() {
  84. return classinfo;
  85. }
  86.  
  87. public void setClassinfo(ClassInfo classinfo) {
  88. this.classinfo = classinfo;
  89. }
  90.  
  91. public Set<ProjectInfo> getProjects() {
  92. return projects;
  93. }
  94.  
  95. public void setProjects(Set<ProjectInfo> projects) {
  96. this.projects = projects;
  97. }
  98.  
  99. public Student() {
  100. }
  101.  
  102. public Student(int studentId, String studentName, String studentSex, int studentAge, ClassInfo classinfo, Date birthday) {
  103. this.studentId = studentId;
  104. this.studentName = studentName;
  105. this.studentSex = studentSex;
  106. this.studentAge = studentAge;
  107. // this.classId = classId;
  108. this.classinfo = classinfo;
  109. this.birthday = birthday;
  110. }
  111.  
  112. }

班级实体类ClassInfo.java

  1. package com.pojo;
  2.  
  3. import java.util.Date;
  4. import java.util.Set;
  5.  
  6. import javax.persistence.CascadeType;
  7. import javax.persistence.Column;
  8. import javax.persistence.Entity;
  9. import javax.persistence.FetchType;
  10. import javax.persistence.GeneratedValue;
  11. import javax.persistence.Id;
  12. import javax.persistence.OneToMany;
  13. import javax.persistence.Table;
  14.  
  15. import org.hibernate.annotations.GenericGenerator;
  16.  
  17. @Entity
  18. @Table(name="class_info",schema="JAVA")
  19. public class ClassInfo {
  20. @Id//表明这个字段就是主键
  21. @GeneratedValue(generator="incre")
  22. @GenericGenerator(name="incre",strategy="increment")
  23. @Column(name="class_id")
  24. // @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CUST_SEQ")//使用序列的方式维护主键
  25. int classId;
  26.  
  27. @Column(name="class_name")
  28. String className;
  29.  
  30. @Column(name="create_time")
  31. Date createTime;
  32.  
  33. @Column(name="status")
  34. String status;
  35.  
  36. @OneToMany(mappedBy="classinfo",cascade=CascadeType.ALL ,fetch=FetchType.EAGER)
  37. Set<Student> stus;
  38.  
  39. public ClassInfo() {
  40. }
  41.  
  42. public ClassInfo(int classId, String className, Date createTime, String status) {
  43. this.classId = classId;
  44. this.className = className;
  45. this.createTime = createTime;
  46. this.status = status;
  47. }
  48.  
  49. public int getClassId() {
  50. return classId;
  51. }
  52. public void setClassId(int classId) {
  53. this.classId = classId;
  54. }
  55. public String getClassName() {
  56. return className;
  57. }
  58. public void setClassName(String className) {
  59. this.className = className;
  60. }
  61. public Date getCreateTime() {
  62. return createTime;
  63. }
  64. public void setCreateTime(Date createTime) {
  65. this.createTime = createTime;
  66. }
  67. public String getStatus() {
  68. return status;
  69. }
  70. public void setStatus(String status) {
  71. this.status = status;
  72. }
  73.  
  74. public Set<Student> getStus() {
  75. return stus;
  76. }
  77.  
  78. public void setStus(Set<Student> stus) {
  79. this.stus = stus;
  80. }
  81.  
  82. }

科目实体类ProjectInfo.java

  1. package com.pojo;
  2.  
  3. import java.util.Set;
  4.  
  5. import javax.persistence.Column;
  6. import javax.persistence.Entity;
  7. import javax.persistence.GeneratedValue;
  8. import javax.persistence.Id;
  9. import javax.persistence.ManyToMany;
  10. import javax.persistence.Table;
  11.  
  12. import org.hibernate.annotations.GenericGenerator;
  13.  
  14. @Entity
  15. @Table(name="project_info",schema="JAVA")
  16. public class ProjectInfo {
  17. @Id//表明这个字段就是主键
  18. @GeneratedValue(generator="incre")
  19. @GenericGenerator(name="incre",strategy="increment")
  20. @Column(name="project_id")
  21. int projectid;
  22.  
  23. @Column(name="project_name")
  24. String projectname;
  25.  
  26. @ManyToMany(mappedBy="projects")
  27. Set<Student> stus;
  28.  
  29. public int getProjectid() {
  30. return projectid;
  31. }
  32. public void setProjectid(int projectid) {
  33. this.projectid = projectid;
  34. }
  35. public String getProjectname() {
  36. return projectname;
  37. }
  38. public void setProjectname(String projectname) {
  39. this.projectname = projectname;
  40. }
  41.  
  42. }

 配置文件hibernate.cfg.xml

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

测试代码

  1. TestRelotion.java
  1. package com.dao;
  2.  
  3. import java.util.Date;
  4. import java.util.HashSet;
  5. import java.util.List;
  6.  
  7. import com.pojo.ClassInfo;
  8. import com.pojo.ProjectInfo;
  9. import com.pojo.Student;
  10.  
  11. public class TestRelotion {
  12. public static void main(String[] args) {
  13. IStudentDAO stuDAO = new StudentDAO();
  14. // List<Student> list = stuDAO.queryObjectByHql("from Student");
  15. // for (Student stu : list) {
  16. // System.out.println(stu.getStudentName()+",班级是:"+stu.getClassinfo().getClassName()+"开班时间:"+stu.getClassinfo().getCreateTime());
  17. // }
  18. //
  19. IClassInfoDAO cdao = new ClassInfoDAO();
  20. // List<ClassInfo> cs = cdao.queryObjectBySql("select * from Class_Info a where a.class_Id=1",ClassInfo.class);
  21. // ClassInfo c= cs.get(0);
  22. // System.out.println(c.getClassName());
  23. // for (Student stu : c.getStus()) {
  24. // System.out.println(stu.getStudentName()+"\t"+stu.getBirthday());
  25. // }
  26.  
  27. //新增学员
  28. // ClassInfo c = new ClassInfo(2, null, null, null);
  29. // Student stu = new Student(0,"测试新增","1",20,c,new Date());
  30. // stuDAO.saveObject(stu);
  31.  
  32. //删除学员
  33. // Student stu = new Student();
  34. // stu.setStudentId(13);
  35. // stuDAO.delObject(stu);
  36.  
  37. //修改学员
  38. // List<Student> stus = stuDAO.queryObjectByHql("from Student a where a.studentId=1");
  39. // Student stu = stus.get(0);
  40. // stu.setStudentName("谢娜");
  41. // stu.setClassinfo(new ClassInfo(1,null,null,null));
  42. // stuDAO.updateObject(stu);
  43.  
  44. //删除班级
  45. // ClassInfo c = new ClassInfo(3, null, null, null);
  46. // cdao.delObject(c);
  47.  
  48. //给学员选课
  49. //给学员新增选课
  50. //给学员删除选课
  51. //查询学员选了哪些课
  52. //查询课程被哪些学员选中
  53. List<Student> stus = stuDAO.queryObjectByHql("from Student a where a.studentId=1");
  54. Student stu = stus.get(0);
  55. //stu.setProjects(projects);
  56.  
  57. IProjectInfoDAO projectDAO = new ProjectInfoDAO();
  58. // List<ProjectInfo> plist = projectDAO.queryObjectByHql("from ProjectInfo");
  59. // stu.setProjects(new HashSet(plist));
  60. // stuDAO.updateObject(stu);
  61.  
  62. // for (ProjectInfo p : stu.getProjects()) {
  63. // System.out.println(p.getProjectname());
  64. // }
  65. }
  66. }

附:

  常用JPA注解

  1. 常用:
  2. @Entity @Table(name="表名",schema="数据库名"):表明这是一个实体类。一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话, @Table可以省略
  3.  
  4. @Id:表示该属性为主键。
  5.  
  6. @Column:如果字段名与列名相同,则可以省略。
  7.  
  8. @GeneratedValueJPA通用策略生成器
  9. (strategy = GenerationType.SEQUENCE,generator = repair_seq”):表示主键生成策略是sequence(可以为AutoIDENTITYnative等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq
  10. TABLE:使用一个特定的数据库表格来保存主键。
  11. SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
  12. IDENTITY:主键由数据库自动生成(主要是自动增长型)
  13. AUTO:主键由程序控制。
  14.  
  15. @GenericGeneratorhibernate主键策略生成器
  16. @GenericGenerator注解配合 @GeneratedValue一起使用, @GeneratedValue注解中的"generator"属性要与 @GenericGenerator注解中name属性一致,strategy属性表示hibernate的主键生成策略
  17.  
  18. @OneToOne @OneToMany @ManyToOne:对应hibernate配置文件中的一对一,一对多,多对一,有主从关系。
  19. eg: @OneToMany(mappedBy="classinfo",cascade=CascadeType.ALL ,fetch=FetchType.EAGER)
  20. fetch取值:
  21. FetchType.EAGER 表示主类被加载时加载,
  22. FetchType.LAZY 后者表示被访问时才会加载。
  23. cascade取值:
  24. CascadeType.PERSIST(级联新建),
  25. CascadeType.REMOVE(级联删除),
  26. CascadeType.REFRESH(级联刷新),
  27. CascadeType.MERGE(级联更新),
  28. CascadeType.ALL(选择全部)。
  29.  
  30. @JoinColumnname=”loginId”):一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。
  31.  
  32. 其他:
  33. @SequenceGeneretor(name = repair_seq”, sequenceName = seq_repair”, allocationSize = 1):namesequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致。
  34.  
  35. @Transient:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。
  36. 如果一个属性并非数据库表的字段映射,就务必将其标示为 @Transient,否则,ORM框架默认其注解为 @Basic
  37. @Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载方式
  38.  
  39. @JsonIgnore:作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。
  40.  
  41. @MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。
  42.  
  43. @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. 当List<String> list =new ArrayList<String>(20); 他会扩容多少次

    当List<String> list =new ArrayList<String>(20); 他会扩容多少次?A 0       B 1 C 2 D 3答案是A: 因为这个集合 ...

  2. Identity Server 4 - Hybrid Flow - MVC客户端身份验证

    预备知识 可能需要看一点点预备知识 OAuth 2.0 不完全简介: https://www.cnblogs.com/cgzl/p/9221488.html OpenID Connect 不完全简介: ...

  3. Docker & ASP.NET Core (1):把代码连接到容器

    和这种蛋糕一样,Docker的容器和镜像也是使用类似的分层文件系统构建而成的. 这样做的好处就是可以节省硬盘空间,也利于复用等等.因为Docker基于镜像创建容器的时候,其镜像是共享的:而且镜像里面的 ...

  4. Linux学习笔记--vi

    在Linux上使用vi命令修改一个文件内容的时候,发现无法保存,每次写完使用“:q!”命令可以正常退出但是使用":wq!"命令保存文件并退出时出现一下信息提示: E212: Can ...

  5. 写给 Android 开发的小程序布局指南,Flex 布局!

    一.序 Hi,大家好,我是承香墨影! 最近在做小程序,验证一些方向,开发效率确实很快,就是各种微信的审核有点费劲,但是总归是有办法解决的. 想要开发一款小程序,其实和我们正常写一款 App 类似,你需 ...

  6. Android Studio开发环境配置以及相关说明

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里简单记录下在开发的时候使用的Android Studio开发环境版本以及相关注意事项. 一般来讲,每隔一段时间就要检查下Andr ...

  7. DotNetCore跨平台~聊聊中间件

    回到目录 在进行.net core平台之后,我们如果希望在请求过程中添加一些事件是非常容易的,你可以把这些事件做成一个中间件Middleware,然后这些中间件就会以Http pipeline的管道方 ...

  8. Springboot整合Elastic-Job(二)

    上文我们讲到Springboot整合Elastic-Job整合的demo,只是简单的实现了主要功能.本文在上文基础上,进行新的调整. 事件追踪 Elastic-Job提供了事件追踪功能,可通过事件订阅 ...

  9. .netcore 模块积累

    最全的 demo https://github.com/XiaoFaye/netcore-samples http://files.cnblogs.com/files/kellynic/practic ...

  10. C++与Lua交互之配置&交互原理&示例

    |Lua 简介 Lua 是一种轻量小巧的脚本语言,也是号称性能最高的脚本语言,它用C语言编写并以源代码形式开放. 某些程序常常需要修改内容,而修改的内容不仅仅是数据,更要修改很多函数的行为. 而修改函 ...