数据库是oracle

以一对多为例:user50一的一方      order50是多的一方

首先是实体类:

这里的实体是双向关系,既通过user50可以找到order50,通过order50可以找到user50

user实体类:

package com.c50.entity;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.GenericGenerator;

//代表此类参与ORM映射,此注解必须要有
@Entity
//代表user这个类映射了一个表user50,如果表名和类名一样,此注解可以省略
@Table(name="user50")
public class User {
    //主键,此注解必须要有
    @Id
    //数据库表中主键列名为id,如果实体类属性名和列名相同,此注解可以省略
    @Column(name="id")
    //主键的维护策略
    @GenericGenerator(name="inc50",strategy="increment")
    @GeneratedValue(generator="inc50")
    private Integer userID;
    private String name;
    private Integer age;
    @Column(name="birth")
    //此属性是日期类型,time:只保存时间       date:只保存日期         timestamp:(默认)日期+时间
    @Temporal(TemporalType.DATE)
    private Date birthday;
    //关系属性
    //mappedBy="对方中映射着外键的关系属性"=="order类中关系属性为user"
    @OneToMany(mappedBy="user")
    //ALL:增删改都可以级联(cascade)
    //save-update:增加和更新可以级联
    //delete:删除可以级联
    //如果不设置,则增删改都不可以级联
    //注意:查询例外,不受级联权限的控制,默认级联。
    @Cascade(value=CascadeType.DELETE)
    private Set<Order> orders=new HashSet<Order>();

    public Set<Order> getOrders() {
        return orders;
    }

    public void setOrders(Set<Order> orders) {
        this.orders = orders;
    }

    public User(){}

    public User(Integer userID, String name, Integer age, Date birthday) {
        super();
        this.userID = userID;
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    public Integer getUserID() {
        return userID;
    }
    public void setUserID(Integer userID) {
        this.userID = userID;
    }
    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;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "User [userID=" + userID + ", name=" + name + ", age=" + age
                + ", birthday=" + birthday + "]";
    }

}

order实体类:

package com.c50.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="order50")
public class Order {
    @Id
    @GenericGenerator(name="inc50",strategy="increment")
    @GeneratedValue(generator="inc50")
    private Integer id;
    private Double price;
    private String note;
    //关系属性
    @ManyToOne
    @JoinColumn(name="user_id")
    private User user;

    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Double getPrice() {
        return price;
    }
    public void setPrice(Double price) {
        this.price = price;
    }
    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }
    @Override
    public String toString() {
        return "Order [id=" + id + ", price=" + price + ", note=" + note + "]";
    }
    public Order(){}
    public Order(Integer id, Double price, String note) {
        super();
        this.id = id;
        this.price = price;
        this.note = note;
    }

}

测试代码:

package com.c50.test;

import java.util.Date;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import com.c50.entity.Order;
import com.c50.entity.Passport;
import com.c50.entity.User;
import com.c50.entity.User;
import com.c50.util.HibernateUtil;

public class TestOne2Many {
    @Test
    public void testQuery(){
        Session session=HibernateUtil.getCurrentSession();
        Transaction tx=session.beginTransaction();
        //User user=(User)session.get(User.class,2);
        Order order=(Order)session.get(Order.class,1);
        /*for(Order order:user.getOrders()){
            System.out.println(order);
        }
        System.out.println(user);*/
        tx.commit();
    }
    /**
     * 1.单独插入主表:和单表插入无异。略
     * 2.单独插入从表:为已有的主表附加数据
     */
    @Test
    public void testInsert(){
        Session session=HibernateUtil.getCurrentSession();
        Transaction tx=session.beginTransaction();
        //查询主表数据
        User user=(User)session.get(User.class,1);
        //创建从表数据
        Order order=new Order(null,500.50,"c50");
        //维护关系:告知order,其从属哪个user,以获得外键来源
        order.setUser(user);
        //保存
        session.save(order);
        tx.commit();
    }
    /**
     * 3.同时插入双方:级联插入
     */
    @Test
    public void testInsert2(){
        Session session=HibernateUtil.getCurrentSession();
        Transaction tx=session.beginTransaction();
        //创建双方数据
        User user=new User(null,"liwenhao",18,new Date());
        Order order=new Order(null,300.50,"c50");
        //维护关系
        user.getOrders().add(order);//使得user可以携带order一起入库保存
        order.setUser(user);//使得order有外键来源
        //保存
        session.save(user);
        tx.commit();
    }
    /**
     * 删除 1.输出主表:级联删除
     */
    @Test
    public void testDelete(){
        Session session=HibernateUtil.getCurrentSession();
        Transaction tx=session.beginTransaction();
        //查询要删除的主表
        User user=(User)session.get(User.class, 3);
        //删除
        session.delete(user);
        tx.commit();
    }
    /**
     * 删除 2.单独删除从表:和单表操作无异
     */
    @Test
    public void testDelete2(){
        Session session=HibernateUtil.getCurrentSession();
        Transaction tx=session.beginTransaction();
        //查询要删除的从表
        Order order=(Order)session.get(Order.class,5);
        //删除
        session.delete(order);
        tx.commit();
    }
    /**
     * 更新:
     *   1.单独更新一方
     *   2.级联更新双方      更新时的注意:        如果A不是孤立的表,且,A上明确映射了外键的话,则在更新A时,就不能直接更新new出来的A,        而是应该先查询,改属性,更新(事务内部加载出的数据)
     */
    @Test
    public void testUpdate(){
        Session session=HibernateUtil.getCurrentSession();
        Transaction tx=session.beginTransaction();
        //1.获取数据
        User User=(User)session.get(User.class,6);
        //2.修改属性
        User.setName("cuiyafeng55");
        User.setAge(19);
        //更新
        session.update(User);
        tx.commit();
    }
}

HIbernate的增删改的更多相关文章

  1. Hibernate全套增删改查+分页

    1.创建一个web工程 2.导入jar包 3.创建Student表 4.创建实体类 package com.entity; public class Student { private Integer ...

  2. SpringMVC整合Hibernate实现增删改查之按条件查询

    首先我贴出我项目的结构,只完成了条件查询的相关代码,增删改没有写. 1.新建一个动态Web工程,导入相应jar包,编写web.xml配置文件 <context-param> <par ...

  3. Hibernate的增删改查

    一.搭建Hibernate开发环境,这里就不说了,直接说环境搭好后的事情. 二.项目的目录结构

  4. hibernate实现增删改查的各种方法

    1>接口(主要是增删改查的接口)BaseDao.java /** * * @author fly.zhou */ public interface IBaseDao { //增加对应实体的一条记 ...

  5. EasyUI + Spring MVC + hibernate实现增删改查导入导出

    (这是一个故事--) 前言 作为一个JAVA开发工程师,我觉得最基本是需要懂前端.后台以及数据库. 练习的内容很基础,包括:基本增删改查.模糊查询.分页查询.树菜单.上传下载.tab页 主管发我一个已 ...

  6. hibernate之增删改查demo

    package dao; import java.util.ArrayList; import java.util.List; import org.hibernate.Query; import o ...

  7. Hibernate基础增删改查语法

    1.创建好Hibernate项目,创建好实体类和测试类,如果不会创建Hibernate项目的同学,点此处:http://www.cnblogs.com/zhaojinyan/p/9336174.htm ...

  8. (四)Hibernate的增删改查操作(1)

    Hiberntae的查找操作有多种: 1.  使用Criteria接口查询 Query_Criteria.java package action; import java.util.ArrayList ...

  9. hibernate学习笔记之四 Hibernate的增删改查

    采用JUnit测试,继承TestCase import java.util.Date; import junit.framework.TestCase; import org.hibernate.Se ...

随机推荐

  1. [转]在ASP.NET MVC5中实现具有服务器端过滤、排序和分页的GridView

    本文转自:http://www.cnblogs.com/powertoolsteam/p/MVC5_GridView_2.html 背景 在前一篇文章<[初学者指南]在ASP.NET MVC 5 ...

  2. ListView的基础应用

    在写完基础的布局之后,下一课我们会学习一下如何使用Android中一个非常重要,但是对于新手略有困难的ListView,甚至很久以前都有人说过,会不会写ListView是Android能否入门的第一步 ...

  3. Spring学习之第一个AOP程序

    IOC和AOP是Spring的两大基石,AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对 ...

  4. 【原创Android游戏】NinOne V2.3.1 --加载模式的学习,界面的重新设计

    上次更新后又发现了一些bug,而且是非常明显的bug,一一加以改正了过来. 猜数字游戏的功能已基本实现,不过我觉得一个应用单做一个游戏有点不太过瘾,略显单调,于是我打算基于这个,写一个n合1的游戏集成 ...

  5. UVa10820 Send a Table[欧拉函数]

    Send a TableInput: Standard Input Output: Standard Output When participating in programming contests ...

  6. ural 1208 Legendary Teams Contest

    题意描述:给定K支队伍,每队三个队员,不同队伍之间队员可能部分重复,输出这些队员同时能够组成多少完整的队伍: DFS,利用DFS深度优先搜索,如果该队所有队员都没有被访问过,那么将该队计入结果,再去选 ...

  7. jmeter 与 java http

    jmeter 如果对java代码进行测试 1.eclips中创建一个项目,且写一个待测试的简单java代码 2.将jmeter路径下 x:\xx\lxx\Dowxxxxxx\apache-jmeter ...

  8. java 22 - 13 多线程之解决线程安全问题的实现方式2

    上一章说了,解决线程安全问题的实现方式1是使用同步代码块 同时也知道了,同步代码块的锁对象是任意对象:(Object obj ;  Demo d;)这些都行 那么,现在来说解决线程安全问题的实现方式2 ...

  9. 百度搜索--jquery

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  10. Delphi项目的构成

    Hello.cfg 項目配置文件 Hello.dof 項目選項文件 Hello.dpr 項目文件 Hello.exe 應用程序 Hello.res 資源文件 HelloWorld.dcu 窗口編譯文件 ...