`
sungang_1120
  • 浏览: 309456 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

HIBERNATE配置注解 一对多

阅读更多

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一对多关联映射(注解)

    NULL 博文链接:https://profound-accumulation.iteye.com/blog/2243079

    hibernate映射的注解配置

    使用hibernate的注解配置可以很好的完成跟实体的映射。而且还可以通过注解配置,可以完成多对一,一对多等关系的配置,非常好。

    ssh全注解项目(一对一,一对多,多对多)

    ssh全注解项目(一对一,一对多,多对多),hibernate的注解配置及映射关系

    Hibernate注解

    * @OneToMany 设置一对多关联。cascade属性指定关联级别,参考@OneToOne中的说明。fetch指定是否延迟加载,值为FetchType.LAZY表示延迟,为FetchType.EAGER表示立即加载 * 方法一 使用这种配置,在为“一端”添加“多...

    Hibernate1对多1对1多对多关联映射例子源码含注解配置

    在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式以后,发现使用...

    hibernate+spring+springmvc框架 @注解开发 详细配置注释/及hibernate的HQL/QBC/SQL查询代码使用及注释

    于是我花了几天时间搭建出来的hibernate+springmvc的框架,这个框架去除hibernate配置, 将配置全部整合到spring中,开发中使用注解开发即可,很方便,以后我还会持续更新的。 这是一个maven项目,放在eclipse中,改...

    hibernate注解式代码应用

    重点包括一对一,一对多及多对多关系的配置代码实例。 myeclipse项目工程导入即可运行(需要自行导入hibernat4.1.4包依赖(myeclipse中自带此包))。每个实例均附说明及mysql的库表sql。另,如果要测试代码中的hbm2...

    Hibernate学习笔记和资料

    hibernate中一对一,一对多,多对多关系的配置,延迟加载,cascade,inverse hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式

    hibernate4.3.8的annotation及xml的一对多的双向案例

    一个完成了hibernate的注解和配置的简单案例;这是一个一对多【多对一】的案例,其实一对多的案例就可以解决项目中的大部分需求。因为多对多可以一般我们转化为两个多对一的案例;

    Hibernate1对多1对1多对多关联映射例子源码含xml配置

    在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,这个是xml配置的例子

    hibernate 体系结构与配置 参考文档(html)

    一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) 8.2. 在...

    Hibernate Annotations 中文文档

    一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. 映射复合主键与外键 2.2.7. 映射二级表...

    Hibernate+中文文档

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...

    HibernateAPI中文版.chm

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...

    hibernate3.2中文文档(chm格式)

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...

    hibernate annotation 中文文档

    一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. 映射复合主键与外键 2.2.7. 映射二级表...

    Hibernate注释大全收藏

    这种策略支持双向的一对多关联,但不支持 IDENTIFY 生成器策略,因为ID必须在多个表间共享。一旦使用就不能使用AUTO和IDENTIFY生成器。 每个类层次结构一张表 @Entity @Inheritance(strategy=InheritanceType....

    Hibernate中文详细学习文档

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...

    Hibernate 中文 html 帮助文档

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) 8.2. 在...

Global site tag (gtag.js) - Google Analytics