`
java心如止水
  • 浏览: 32023 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

数据关联关系之二(一对多)--Hibernate解决方案.

阅读更多

在学习数据的关联关系时候,请把容器映射看一看.不然不容易理解关联关系.
  
环境: Myeclispe+mysql.
(1) 创建表
--删除表
drop table if exists book ;
drop table if exists person;

--新建表
create table person
(
 pid int not null auto_increment primary key ,
 name varchar(20) not null ,
 age int
);

create table book
(
 id int not null auto_increment primary key,
 book_name varchar(20) not null ,
 publish varchar(20) ,
 pid int ,
 foreign key(pid) references person(pid) on delete cascade
);

--事务提交
commit ;

(2) Peson.java 类

package org.hibernate.onetomany.vo;

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

public class Person {
 private int id ;
 private String name ;
 private int age ;
 private Set books = new HashSet() ;
 public Set getBooks() {
  return books;
 }
 public void setBooks(Set books) {
  this.books = books;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 
}

(3) Person.hbm.xml
<?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.hibernate.onetomany.vo.Person" table="person" >
        <id name="id" type="java.lang.Integer">
         <column name="pid"></column>
         <generator class="increment"></generator>
        </id>
        <property name="name" type="java.lang.String">
         <column name="name"></column>
        </property>
        <property name="age" type="java.lang.Integer">
         <column name="age"></column>
        </property>
       
       <set name="books" table="book" cascade="all" inverse="true"  >
         <key >
          <column name="pid"></column>
         </key>
         <one-to-many class="org.hibernate.onetomany.vo.Book" />
       </set>
       
    </class>
</hibernate-mapping>

(3) Book.java
package org.hibernate.onetomany.vo;

public class Book {
 private int id ;
 private String bookName ;
 private String publish ;
 private Person person ;
 
 public Person getPerson() {
  return person;
 }
 public void setPerson(Person person) {
  this.person = person;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getBookName() {
  return bookName;
 }
 public void setBookName(String bookName) {
  this.bookName = bookName;
 }
 public String getPublish() {
  return publish;
 }
 public void setPublish(String publish) {
  this.publish = publish;
 }
}

(4)Book.hbm.xml
<?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.hibernate.onetomany.vo.Book" table="book">
       <id name="id" type="java.lang.Integer">
         <column name="id"></column>
         <generator class="increment">
         </generator>
       </id>
       <property name="bookName" type="java.lang.String">
         <column name="book_name"></column>
       </property>
       <property name="publish">
         <column name="publish"></column>
       </property>
       <many-to-one name="person" class="org.hibernate.onetomany.vo.Person" insert="true" update="true">
         <column name="pid" ></column>
       </many-to-one>
    </class>
</hibernate-mapping>

(5) PersonDao.java
package org.hibernate.onetomany.dao;

import java.util.Set;

import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.hibernate.onetomany.vo.Book;
import org.hibernate.onetomany.vo.Person;

public class PersonDao {
 private Session session ;
 public PersonDao()
 {
  session = new Configuration().configure().buildSessionFactory()
      .openSession() ;
 }
 
 public void insert(Person p)
 {
  session.save(p) ;
  session.beginTransaction().commit() ;
  session.close() ;
 }
 
 public static void main(String[] args) {
  PersonDao pd = new PersonDao() ;
  
  Person p = new Person() ;
  p.setName("zhangsan") ;
  p.setAge(1) ;
  
  Book b1 = new Book() ;
  b1.setBookName("jspjsp") ;
  b1.setPublish("2007-10.12") ;
  b1.setPerson(p) ;
  
  
  p.getBooks().add(b1)  ;
  
  
  
  pd.insert(p) ;

 }

}

 

 

分享到:
评论

相关推荐

    hibernate-release-5.3.2.Final

    2018年7月5日,Hibernate发布了其最新版本——5.3.2.Final,带来了诸多改进和新特性,为开发者提供了更为高效、稳定的持久化解决方案。 一、Hibernate ORM概述 Hibernate ORM(Object-Relational Mapping)是一种将...

    hibernate-release-5.2.10

    7. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@ManyToMany)关系的映射,方便处理对象间的关联关系。 8. **延迟加载**:Hibernate的懒加载策略可以在需要时才...

    hibernate使用主键关联的一对一关系

    在Java的持久化框架Hibernate中,一对一(OneToOne)关系是一种常见的对象关系映射(ORM)配置,用于表示两个实体类之间的一种唯一关联。在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来...

    myeclipse试用小记----Hibernate多对一单向关联(1)

    标题 "myeclipse试用小记----Hibernate多对一单向关联(1)" 提到的是在MyEclipse集成开发环境中使用Hibernate框架实现多对一单向关联的实践记录。这个主题涉及到Java后端开发中的数据库关系映射和对象持久化技术。 ...

    hibernate-common-annotations.jar

    6. @OneToMany、@ManyToOne、@OneToOne、@ManyToMany:表示不同类型的关联关系,如一对一、一对多、多对多。 7. @JoinColumn:用于指定关联字段在表中的具体列名。 8. @Temporal:处理日期和时间类型的字段,如...

    hibernate-annotations-3.4.0.GA.rar

    - `@ManyToOne`, `@OneToMany`: 表示一对多或多对一的关系,用于实体间的关联映射。 - `@OneToOne`: 一对一关系,一个实体对应另一个实体的唯一实例。 - `@JoinColumn`: 定义外键列的属性,如名称、是否自增等。 ...

    Hibernate关联关系

    本节将主要介绍一对多和多对一这两种常见的关联关系及其在Hibernate中的实现方式。 #### 多对一关联关系 多对一关联关系表示多个实体可以关联到一个实体。在Hibernate中,可以通过`&lt;many-to-one&gt;`标签来实现这种...

    hibernate-release-5.4.17.Final.zip

    Hibernate,作为Java领域中的一个著名对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而非繁琐的SQL语法。在本文中,我们将深入探讨Hibernate 5.4.17.Final这一官方稳定版本,...

    hibernate-release-4.2.3.lib.zip

    包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)等关系映射,以及集合的元素类型(List、Set、Map等)和级联操作(CascadeType)。 总结,`hibernate-release-4.2.3....

    Hibernate关联映射

    9. Hibernate 一对一外键双向关联、主键双向关联、连接表双向关联、一对多外键双向关联、一对多连接表双向关联、多对多双向关联: 这些关联方式与单向关联类似,区别在于两个实体类都知道彼此的关联。在双向关联中...

    hibernate-distribution-3.6.6.Final-dist

    6. **关联映射**:Hibernate支持一对一、一对多、多对一、多对多等各种关联映射,通过`@OneToOne`、`@OneToMany`、`@ManyToOne`和`@ManyToMany`等注解实现。 7. **缓存机制**:3.6.6版本继续优化了第二级缓存,通过...

    hibernate-release-5.0.12.Final.rar

    Hibernate支持多种关联关系映射,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)。关联映射的配置和使用是Hibernate中的重要环节。 10. **拦截器与事件监听** Hibernate...

    hibernate-jpa.jar

    5. **关联管理**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)的关系映射,以及懒加载(lazy loading)和即时加载(eager loading)策略。 6. **查询API**:除了...

    hibernate关联映射详解SSH 多对多,一对多关系对象映射

    本篇文章将深入探讨Hibernate中的一对多和多对多关系映射。 首先,让我们理解一对多关联映射。在数据库中,一对多关系意味着一个表中的记录可以与另一个表中的多个记录相关联。在Hibernate中,这可以通过在实体类中...

    hibernate-release-4.3.11.Final.lib.required.zip

    9. **关联映射**:Hibernate支持多种关联类型,如一对一、一对多、多对一、多对多,通过配置文件或注解定义实体间的关联。 10. **性能优化**:Hibernate提供了多种优化手段,如延迟加载(Lazy Loading)、批处理...

    hibernate5.3 jar包

    总的来说,Hibernate 5.3.0.Final是一个强大且稳定的ORM解决方案,它提供了丰富的功能和优化,让Java开发者能更专注于业务逻辑,而非底层数据库操作。通过这个jar包,开发者可以快速地将项目集成到Hibernate框架下,...

    hibernate-annotations-3.4.0.jar

    3. **关联关系注解**:Hibernate支持一对一、一对多、多对一和多对多的关联关系。例如,`@OneToOne`、`@OneToMany`、`@ManyToOne`和`@ManyToMany`分别对应这四种关系。关联关系可以通过`@JoinColumn`或`@JoinTable`...

    hibernate-release-4.2.8.Final.zip

    Hibernate,作为Java领域最著名的对象关系映射(ORM)框架之一,自诞生以来就极大地简化了数据库操作,使得开发者能够更加专注于业务逻辑,而非底层的SQL操作。在 Hibernate 4.2.8.Final 版本中,这一特性得到了...

    hibernate-commons-annotations-3.1.0.GA

    例如,@ManyToOne表示一对多的关系,@OneToOne表示一对一的关系,@OneToMany则用于处理多对一的关联,而@ManyToMany则用于处理多对多的复杂关联。这些注解使得对象关系的映射变得直观且易于维护。 此外,该版本还...

    hibernate-search-3.2.1.Final-dist.zip

    Hibernate Search是Hibernate组织推出的一个开源项目,它将全文搜索引擎的功能与Java持久化框架Hibernate相结合,为开发者提供了一种在Java应用中实现高效全文搜索的解决方案。在hibernate-search-3.2.1.Final-dist....

Global site tag (gtag.js) - Google Analytics