`
jackroomage
  • 浏览: 1222952 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Hibernate容器映射技术 Set 的用法(一对多)

    博客分类:
  • j2ee
阅读更多

//下面的代码完全可以运行。

 

1、数据库脚本的创建


-- 创建表
CREATE TABLE person
(
  id INT PRIMARY KEY ,
  name VARCHAR(20)
) ;
create sequence seq_personn;
commit;
CREATE TABLE emails
(
  id INT  ,
  address VARCHAR(50) ,
  foreign key (id) references person(id) on delete cascade
) ;

 

 

2、pojo类的创建

 

public class Person {
 private Integer id ;
 private String name ;
 // 一个人拥有多个不同的email地址
 private Set emails ;
 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 Set getEmails() {
  return emails;
 }
 public void setEmails(Set emails) {
  this.emails = emails;
 }
}

 

3、操作方法类的创建

public class PersonOperate {
 private Session session;
 
 public PersonOperate(){
  this.session=new Configuration().configure().buildSessionFactory().openSession();
 }
 //添加操作
 public void insert(Person per) {
  this.session.save(per);
  this.session.beginTransaction().commit();
 }
  //根据id删除操作
 public void delete(int id){
  String hql="delete from Person  where id=?";
  Query q=this.session.createQuery(hql);
  q.setInteger(0, id);
        q.executeUpdate();
        this.session.beginTransaction().commit();
 }
 //根据id查询操作
 public Person queryById(int id){
  Person p=null;
  String hql="from Person as p where p.id=?";
  Query q=this.session.createQuery(hql);
  q.setInteger(0, id);
//  List list=q.list();
//  if(list.size()>0){
//   p=(Person)list.get(0);
//  }
  
 //下面的方法和上面的方法的作用是一样的。上面的方法效率应该高一些。 
  List list=q.list();
  Iterator ite=list.iterator();
  if(ite.hasNext()){
  p=(Person)ite.next();
  }
  return p;

 }
 //更新操作
 public void update(Person p){
  this.session.update(p);
  this.session.beginTransaction().commit();
 }


}

 

4、测试类的创建

public class TestPersonOperate {

 public static void main(String[] args)throws Exception{
  PersonOperate po=new PersonOperate();
  
  Person p=new Person();
  
  p.setName("jack");
  p.setEmails(new TreeSet());
  p.getEmails().add("
www.jack.com");
  p.getEmails().add("
www.jack.com");
  p.getEmails().add("
www.jack.com");
  p.getEmails().add("
www.123.com");

  

//       下面是插入数据的操作
//       po.insert(p);
//   System.out.println("可以成功的插入数据!");
  
//      下面是删除操作
//    po.delete(14);
//  System.out.println("可以成功的删除数据!");
  
//      下面是根据Id查询操作
//     Person per=po.queryById(19);
//  System.out.println(per.getName());
  
//      下面是更新操作
  Person per=po.queryById(19);
     per.getEmails().add("
www.janice.com");
     per.getEmails().add("
www.jack.com");
     per.getEmails().add("
www.jack.com");
     per.getEmails().add("
www.123.com");
  po.update(per);

 }

}

 

5、配置文件的创建

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="org.hibernate5.com.Person" table="PERSON" schema="SCOTT">
        <id name="id" type="java.lang.Integer">
            <column name="ID" precision="22" scale="0" />
            <generator class="sequence">
            <param name="sequence">seq_personn</param>
            </generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="20" />
        </property>
       
        <set name="emails" table="emails" lazy="false">
   <key column="ID"></key>
   <element type="java.lang.String" column="address"></element>
  </set>
    </class>
</hibernate-mapping>


完毕!

总结:Hibernate容器映射技术 还有list ,map等,一些用法。

 

分享到:
评论

相关推荐

    hibernate中容器映射技术

    在Java持久化框架Hibernate中,容器映射技术是将Java集合类(如Set、Map、List等)与数据库中的关联关系进行映射的一种方法。这种技术使得对象之间的复杂关系能够被有效地存储和检索,增强了数据操作的灵活性。下面...

    [原]Hibernate集合映射

    一对多关系是常见的映射类型,例如,一个部门有多个员工。在实体类中,我们使用`@OneToMany`注解,并通过`mappedBy`属性指定关联的父类字段。同时,父类需要在对应字段上添加`@ManyToOne`注解。 5. **多对一(Many...

    hibernate 一对多 set 与 list 分别用法

    在Java的持久化框架Hibernate中,一对多关系是常见的实体关联类型,表示一个实体可以与多个其他实体相关联。在处理这种关系时,我们通常会使用`Set`或`List`作为关联集合的容器。本篇文章将深入探讨`Hibernate`中一...

    hibernate(基于MVC的服务器架构技术)

    对象关联映射是Hibernate的核心特性,它支持一对一、一对多、多对一和多对多等多种关联关系。通过配置映射文件,可以定义实体之间的关联,如外键、集合等。 ### 继承映射和容器映射 - **继承映射**:Hibernate支持...

    Hibernate3.1_学习源码

    06 06Hibernate_Collection : Hibernate的容器映射技术,包括list、set和map等。用法大体一致,数据库中的两张表,在实体层设计和配置文件都只有一个 其中数据库用到级联删除。配置文件分别用list、set和map元素...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     15.3.4 把多对多关联分解为两个一对多关联  15.4 小结  15.5 思考题 第16章 Hibernate的检索策略  16.1 Hibernate的检索策略简介  16.2 类级别的检索策略  16.2.1 立即检索  16.2.2 延迟检索  16.3 一对多...

    hibernate中文参考文档

    18. 示例:不同的映射:除了父子关系映射,还可能有其他类型的映射,如多对多关系映射、一对一关系映射等。这里应该会介绍如何处理这些复杂的映射场景。 19. 最佳实践:最后,文档将总结Hibernate开发中的一些最佳...

    Hibernate的配置详解

    在本篇中,我们将深入探讨Hibernate的配置,特别是涉及一对一、一对多和多对多关系的配置。 首先,配置过程始于`Configuration`接口。这个接口用于设置Hibernate所需的配置信息,如数据源、连接参数等,并根据配置...

    Hibernate Reference

    - 映射具有关联关系的对象,如一对多、多对多等。 - **单向Set-based的关联** - 设置单向的一对多关系,如一个Person可以有多个Phone。 - **使关联工作** - 通过适当的映射配置,确保关联关系正确建立。 - **值...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     15.3.4 把多对多关联分解为两个一对多关联  15.4 小结  15.5 思考题 第16章 Hibernate的检索策略  16.1 Hibernate的检索策略简介  16.2 类级别的检索策略  16.2.1 立即检索  16.2.2 延迟检索  16.3 一对多...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     15.3.4 把多对多关联分解为两个一对多关联  15.4 小结  15.5 思考题 第16章 Hibernate的检索策略  16.1 Hibernate的检索策略简介  16.2 类级别的检索策略  16.2.1 立即检索  16.2.2 延迟检索  16.3 一对多...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     15.3.4 把多对多关联分解为两个一对多关联  15.4 小结  15.5 思考题 第16章 Hibernate的检索策略  16.1 Hibernate的检索策略简介  16.2 类级别的检索策略  16.2.1 立即检索  16.2.2 延迟检索  16.3 一对多...

    Spring+Hibernate+Struts工作原理

    5. 一对多集合使用Bag,多对多集合使用Set。 6. 继承类使用显式多态。 7. 减少表字段数量,增加表关联,利用二级缓存优化。 【Struts工作原理】 Struts是一个MVC(Model-View-Controller)框架,它的核心是Action...

    Hibernate3.2 实用技术手册

    ### Hibernate 3.2 实用技术手册概览 #### 一、引言 Hibernate作为一款优秀的开源ORM(Object Relational Mapping)框架,在Java开发领域内占据着举足轻重的地位。它通过提供一种轻量级的数据访问方式,使得Java...

    hibernatejar包

    - **关系映射(Association)**: 包括`@OneToOne`, `@OneToMany`, `@ManyToOne`, 和 `@ManyToMany`,它们分别对应一对一、一对多、多对一和多对多的关系映射。 - **集合映射(Collection)**: `@ElementCollection...

    hibernate学习文档

    - `&lt;set&gt;`、`&lt;list&gt;`、`&lt;map&gt;`:用于处理一对多或多对多的关联关系。 #### 三、核心功能 ##### 3.1 数据持久化 Hibernate 支持多种方式将 Java 对象持久化到数据库中: - **显式保存**:使用 `session.save...

    hibernate笔记

    10. **集合映射**:包括Set、List、Map的映射,用于处理一对多、多对多的关系。Hibernate支持有序集合,如SortedSet和TreeMap,可以指定排序规则。 11. **对象状态与识别**:Hibernate定义了四种对象状态:瞬时态、...

    Many-To-Many_Element.rar_hibernate 多对多

    本教程主要讲解如何使用Hibernate来处理多对多的关联映射,尤其是基于HashMap的实现方式。 首先,让我们理解多对多关系的基本概念。在数据库中,多对多关系意味着一个实体可以与多个其他实体相关联,反之亦然。为了...

Global site tag (gtag.js) - Google Analytics