hibernate注解方式实现一对多映射

首先是在hibernate.cfg.xml中引入要映射的class

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=GBK</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">sa</property>

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<property name="show_sql">true</property>

<property name="hibernate.hbm2ddl.auto">update</property>

<mapping class="com.sszd.hibernate.Reader"/>

<mapping class="com.sszd.hibernate.Book"/>

</session-factory>

</hibernate-configuration>

我们分别看看reader.java和book.java文件

Reader.java

package com.sszd.hibernate;

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.OneToMany;

import javax.persistence.Table;

@Entity

@Table(name="reader")

public class Reader {

@Id

@Column(name="ID")

@GeneratedValue(strategy=GenerationType.AUTO)

private int id;

@Column(name="MENO")

private String meno;

@Column(name="NAME")

private String name;

@OneToMany(mappedBy = "reader", cascade = CascadeType.ALL, fetch = FetchType.LAZY)

private Set<Book> books = new HashSet<Book>();

public Reader()

{

}

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 getMeno() {

return meno;

}

public void setMeno(String meno) {

this.meno = meno;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

book.java

package com.sszd.hibernate;

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.ManyToOne;

import javax.persistence.Table;

@Entity

@Table(name="book")

public class Book {

@Id

@Column(name="ID")

@GeneratedValue(strategy=GenerationType.AUTO)

private int id;

@Column(name="TITLE")

private String title;

@ManyToOne(cascade = CascadeType.ALL, optional = false)

@JoinColumn(name="rea_id", referencedColumnName="id")//外键为sut_id,与student中的id关联

private Reader reader;

public int getId() {

return id;

}

public Reader getReader() {

return reader;

}

public void setReader(Reader reader) {

this.reader = reader;

}

public void setId(int id) {

this.id = id;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

}

接下来是我们的本地测试用例

package com.sszd.main;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.AnnotationConfiguration;

import com.sszd.hibernate.Book;

import com.sszd.hibernate.Reader;

public class ReaderToBooks {

private static  SessionFactory sessionFactory;

public static void main(String[] args) {

sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

Session session = sessionFactory.openSession();

Reader r = new Reader();

r.setName("Reader zhang");

Book b1 = new Book();

b1.setTitle("title1");

Book b2 = new Book();

b2.setTitle("title2");

b1.setReader(r);

b2.setReader(r);

r.getBooks().add(b1);

r.getBooks().add(b2);

Transaction trx = session.beginTransaction();

session.save(r);

trx.commit();

session.close();

}

}

时间: 2024-10-21 05:29:23

hibernate注解方式实现一对多映射的相关文章

hibernate注解方式来处理映射关系

在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式以后,发现使用annotation的方式可以更简介,所以这里就简单记录下通过annotation来配置各种映射关系,在hibernate4以后已经将annotation的jar包集成进来了,如果使用hibernate3的版本就需要引入annotation的jar包. 一.单对象操作 @Entity

hibernate 注解方式讲解映射关系

注解方式讲解映射关系 1       One-To-One Unidirectional with Foreign Key 单向关联外键方式. 1.1         关系如下 学生和地址关系的例子.一个学生住在一个地址上.一个地址只能由一个学生占用. 1.2         Address代码: package com.daodaofun.domain; import javax.persistence.*; @Entity @Table(name="STUDENT") public

Hibernate注解方式开发实体类

Hibernate注解 1.@Entity(name="EntityName") 必须,name为可选,对应数据库中一的个表 2.@Table(name="",catalog="",schema="") 可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息 name:可选,表示表的名称.默认地,表名和实体名称一致,只有在不一致的情况下才需要指定表名 catalog:可选,表示Cat

Hibernate注解方式实现1-1双向关联

以微博或博客为例,我们希望用户-用户信息设计为如下关系,即用户表用户口令登录等操作.用户信息表用户记录信息: 用户User代码清单: import ***; /** * @author Barudisshu */ @Entity @Table(name = "t_user", schema = "", catalog = "db_blog") public class User implements Serializable { private

Hibernate注解方式实现1-N双向关联

由于Hibernate可以实现逆向工程,可以自动在数据库中创建表,因此这里不提供数据字典内容. 以微博或博客为例,用户和博客之间属于一对多的关系,即1-N型,在数据库中我们希望构建如下关系 创建用户实体类User: import ***; /** * @author Barudisshu */ @Entity @Table(name = "t_user", schema = "", catalog = "db_blog") public clas

基于已构建S2SH项目配置全注解方式简化配置文件

如果还不熟悉s2sh项目搭建的朋友可以先阅读 eclipse环境下基于已构建struts2项目整合spring+hibernate 这两篇文章熟悉一下. 本文是基于以上两篇文章的基础构建的,以下给出全注解方式配置S2SH项目的参考步骤. 第一步:实体类映射数据库表,简化hibernate通过xml配置文件映射 首先我们新建实体类作为测试,包结构如图所示: 新建User到model包下,实体类字段信息如下所示: package wjt.com.test.model; import javax.pe

hibernate中注解方式中的控制反转

都知道hibernate用xml方式配置关系时(one-to-many,many-to-many)可以添加控制反转属性 inverse=false(默认) 即将两表之间的关系交给对方来维护. inverse=true表示本方不维护关系,有对方维护关系 但是需注意的是,one-to-one关系是没有控制反转的,只能交由外键来维护关系. 从而导致在设置关系时,只能有外键方设置,移除关系时,只能从外键方来解除关系,删除记录时,只能先删外键方,在删主键方(save,remove,delete) 如果有控

spring与hibernate整合配置基于Annotation注解方式管理实务

1.配置数据源 数据库连接基本信息存放到properties文件中,因此先加载properties文件 1 <!-- jdbc连接信息 --> 2 <context:property-placeholder 3 location="classpath:io/shuqi/ssh/spring/transactionalAnnotation/jdbc.properties"/> 使用DBCP数据源配置xml如下 1 <!-- dbcp数据源配置 -->

Hibernate注解映射联合主键的三种主要方式(转载)

转自:http://blog.csdn.net/robinpipi/article/details/7655388 联合主键用hibernate注解映射方式主要有三种:第一.将联合主键的字段单独放在一个类中,该类需要实现Java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@Id 第二.将联合主键的字段单独放在一个类中,