2019独角兽企业重金招聘Python工程师标准>>>

开发环境:Mysql+Eclipse

一对多单向的列子原理:一个班级,多个学生,学生端为多的一端,他们拥有一个外键指向相同的班级。

项目结构

需要的jar包

hibernate.cfg.xml

<!-- 配置mysql数据库的连接参数 -->
        
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            <!-- 驱动程序名 -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <!-- 自动创建表 -->
            <property name="hbm2ddl.auto">update</property>
            <!-- 控制台打印sql语句 -->
            <property name="show_sql">true</property> 
            <!-- 数据库名 -->
            <property name="hibernate.connection.url">jdbc:mysql://localhost/test</property>
            <!-- 用户名 -->
            <property name="hibernate.connection.username">root</property>
            <!-- 密码 -->
            <property name="hibernate.connection.password"></property>
            <!-- 对应的实体 -->
            <mapping class="cn.dao.Classes"/>
            <mapping class="cn.dao.Student"/>
    </session-factory>

实体类:

  1. Classes.java

package cn.dao;

import java.io.Serializable;
import java.util.HashSet;
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.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "classes")
public class Classes implements Serializable {

private Long id;

private String name;

private String desc;

private Set<Student> students = new HashSet<Student>();

@Id
    @Column(name = "cid")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

public void setId(Long id) {
        this.id = id;
    }

@Column(name = "cname")
    public String getName() {
        return name;
    }

public void setName(String name) {
        this.name = name;
    }

@Column(name = "cdesc")
    public String getDesc() {
        return desc;
    }

public void setDesc(String desc) {
        this.desc = desc;
    }

@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
    @JoinColumn(name = "cid")
    public Set<Student> getStudents() {
        return students;
    }

public void setStudents(Set<Student> students) {
        this.students = students;
    }

//测试打印
    @Override
    public String toString() {
        return "Classes [id=" + id + ", name=" + name + ", desc=" + desc + ", students=" + students + "]";
    }

}

2.Student.java

package cn.dao;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "student")
public class Student implements Serializable {
    
    private Long id;
    
    private String name;
    
    private String sex;
    
    @Id
    @Column(name = "sid")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

public void setId(Long id) {
        this.id = id;
    }

@Column(name = "sname")
    public String getName() {
        return name;
    }

public void setName(String name) {
        this.name = name;
    }
    
    @Column(name = "sex")
    public String getSex() {
        return sex;
    }

public void setSex(String sex) {
        this.sex = sex;
    }
    
    
}

创建一个打开session的工具类:HibernateUtil

package cn.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

private static SessionFactory sessionFactory;
    private static Session session;

static {
        // 读取Hibernate的配置文件,进行初始化的操作
        Configuration config = new Configuration().configure();
        StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder().applySettings(config.getProperties());
        StandardServiceRegistry registry = ssrb.build();
        sessionFactory = config.buildSessionFactory(registry);
    }

/**
     * 获取SessionFactory
     */

public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

/**
     * 获取session
     */

public static Session getSession() {
        return sessionFactory.openSession();
    }

/**
     * 关闭session
     */

public static void closeSession() {
        if (session != null) {
            session.close();
        }
    }
}

最后一个测试,实现简单的增删改查功能:OneToMany.java

package cn.test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import cn.dao.Classes;
import cn.dao.Student;
import cn.utils.HibernateUtil;

/**
 * 单向的一对多关联操作
 * 
 * @author hasee
 *
 */
public class OneToMany {
    
    public static void main(String[] args) {
         query();
    }

public static void save() {
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        Classes classes = new Classes();
        classes.setName("ClassOne");
        classes.setDesc("This is ClassOne");
        Set<Student> students = new HashSet<Student>();
        Student student = new Student();
        student.setName("Mike");
        student.setSex("boy");
        students.add(student);
        classes.setStudents(students);
        session.save(classes);
        transaction.commit();
        HibernateUtil.closeSession();
    }

public static void edit(){
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        Classes classes = (Classes) session.get(Classes.class, 1L);
        Set<Student> students = classes.getStudents();
        for (Student student : students) {
            student.setName("Jary");
        }
        transaction.commit();
        HibernateUtil.closeSession();
    }
    
    public static void delete(){
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        Classes classes = (Classes) session.get(Classes.class, 1L);
        session.delete(classes);
        transaction.commit();
        HibernateUtil.closeSession();
        
    }
    
    public static void query(){
        Session session = HibernateUtil.getSession();
        Query query = session.createQuery("from Classes");
        List<Classes> list = query.list();
        for (Classes classes : list) {
            System.out.println(classes.toString());
        }
    }
}

转载于:https://my.oschina.net/u/2509896/blog/759316

Hibernate学习系列————注解一对多单向实例相关推荐

  1. 06-hibernate注解-一对多单向外键关联

    一对多单向外键 1,一方持有多方的集合,一个班级有多个学生(一对多). 2,@OneToMany(cascade={CascadeType.ALL}, fetch=FetchType.LAZY ) / ...

  2. (LINQ 学习系列)(8)Linq教程实例: 事务处理

    Linq to sql在提交更新的时候默认会创建事务,一部分修改发生错误的话其它修改也不会生效 下面是插入2个表中的数据进行事务处理 private void TransAdd()         { ...

  3. (LINQ 学习系列)(6)Linq教程实例: 使用自写类代码来访问数据

    1.    自定义一个和数据表相对应的类.例如建议StudentClass.cs     /**     *  meetweb@sohu.com       *  Modify By 2012-3   ...

  4. Hibernate学习之Hibernate注解总结

    Hibernate学习之Hibernate注解总结http://www.bieryun.com/3269.html 一.类级别的注解 @Entity name:表的名字(可选)一般表名和类名相同 必须 ...

  5. Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射

    在我们以前的数据库设计中,设计表就不是一件轻松的事情.多种事物之间往往都是有这样那样的关系的.那怎样设计表格,才能既将事情描述明白,又能使数据库设计的比较合理呢?那里我们提供了好多规范,好多约束来满足 ...

  6. Hibernate一对多单向关联和双向关联映射方法及其优缺点

    一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同. 它们的区别在于维护的关系不同: 一对多关联映射是指在加载一的一端数据的 ...

  7. 深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架

    这篇博客是hibernate学习的第一篇,主要简单介绍hibernate框架,之后简单说一下hibernate的目录结构,最后写一个简单的hibernate实例.通过这三步来简单的认识一下hibern ...

  8. @data注解的作用_Java中注解学习系列教程-2

    在上一篇文章中,我们讲解了:Java中注解的定义.JDK中内置注解.第三方注解. 本文是注解系列教程中的第二篇.来看看今天主要内容: ​ 1:注解的分类 2:元注解说明 3:自定义注解声明 一:注解的 ...

  9. 反射学习系列3-反射实例应用

    反射学习系列目录 反射学习系列1-反射入门 反射学习系列2-特性(Attribute) 反射学习系列3-反射实例应用 作者 例子这个东西其实挺难弄得,弄个简单的,虽然能说明问题但却容易让人觉得没实用价 ...

最新文章

  1. python - 异常处理
  2. setup factory 设置自启动
  3. linux工具之检测内存泄漏-valgrind
  4. 比较全面的MySQL优化参考
  5. 删除 Mac AppStore 正在下载的应用
  6. POJ 1091(数论)
  7. 跟我一起学.NetCore之静态文件处理的那些事
  8. 计算机是一种在什么控制下 自动高速,计算机是一种能对数字化信息进行自动高速运算的通用处....ppt...
  9. Android学习指南
  10. gson java 对象_Gson把json串转换成java实体对象
  11. 求无向图中某顶点的度 (有注释)
  12. 华为手机系统更新后有什么大的变化?
  13. BCH升级在即,什么是OP_CHECKDATASIG和Canonical Transaction Ordering(一)
  14. Helm 3 完整教程(八):Helm 函数讲解(2)字符串函数
  15. PKU3259-Wormholes(SPFA判断负环,含题意)
  16. 《Go程序设计语言》- 第3章:基本数据
  17. impalahive大数据平台数据血缘与数据地图(四)-impala血缘架构图及功能介绍
  18. C# 设置Word文本框中的文字旋转方向
  19. 如何使用PPT制作机器学习模型图
  20. 小尺寸2.4G SMD贴片天线方案 CA-C03 CrossAir贴片天线

热门文章

  1. Oracle中关于计算时间差的例子:
  2. ckeditor5自定义 vue_vue中的富文本编辑器CKEditor5
  3. PaperNotes(19)-Learning Lane Graph Representations for Motion Forecasting
  4. Pytorch(5)-梯度反向传播
  5. 使用Ultra Librarian 生成PCB库文件
  6. python语句分为_python以什么划分语句块
  7. 算法入门篇七 前缀树
  8. 英语口语 week13 Wednesday
  9. Docker 方式安装 zipkin (linux 、阿里云ECS上安装)
  10. 2019.03.27【GDOI2019】模拟 T3