Hibernate One-to-Many using Annotations

翻译 2012年08月07日 12:00:02

本文由尤慕译自这里,转载请保留此信息。

Hibernate Annotation配置 one-to-many。

考虑以下 Student 和 Phone 实体。

relationship between student and phone

一个Student可能有多个Phone,要模拟这种关系,我们需要三张表 STUDENTPHONE 和 STUDENT_PHONE . 如下:



下面是Student和Phone的实体类:

Student.java

package org.aaron.hibernate.entity.one2many;

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

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "STUDENT")
public class Student {
	private long studentId;
	private String studentName;
	private Set<Phone> phones = new HashSet<Phone>();

	public Student() {
	}

	public Student(String studentName, Set<Phone> phones) {
		this.studentName = studentName;
		this.phones = phones;
	}

	@Id
	@GeneratedValue
	@Column(name = "STUDENT_ID")
	public long getStudentId() {
		return studentId;
	}

	public void setStudentId(long studentId) {
		this.studentId = studentId;
	}

	@Column(name = "STUDNET_NAME", nullable = false, length = 100)
	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}

	@OneToMany(cascade = CascadeType.ALL)
	@JoinTable(name = "STUDENT_PHONE", joinColumns = { @JoinColumn(name = "STUDENT_ID") }, inverseJoinColumns = { @JoinColumn(name = "PHONE_ID") })
	public Set<Phone> getPhones() {
		return phones;
	}

	public void setPhones(Set<Phone> phones) {
		this.phones = phones;
	}

}

Phone.java

package org.aaron.hibernate.entity.one2many;

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

@Entity
@Table(name = "PHONE")
public class Phone {
	private long phoneId;
	private String phoneType;
	private String phoneNumber;

	public Phone() {
	}

	public Phone(String phoneType, String phoneNumber) {
		this.phoneType = phoneType;
		this.phoneNumber = phoneNumber;
	}

	@Id
	@GeneratedValue
	@Column(name = "PHONE_ID")
	public long getPhoneId() {
		return phoneId;
	}

	public void setPhoneId(long phoneId) {
		this.phoneId = phoneId;
	}

	@Column(name = "PHONE_TYPE", nullable = false, length = 10)
	public String getPhoneType() {
		return phoneType;
	}

	public void setPhoneType(String phoneType) {
		this.phoneType = phoneType;
	}

	@Column(name = "PHONE_NUMBER", nullable = false, length = 15)
	public String getPhoneNumber() {
		return phoneNumber;
	}

	public void setPhoneNumber(String phoneNumber) {
		this.phoneNumber = phoneNumber;
	}

}


在Hibernate配置文件进行配置:

hibernate.cfg.xml

<?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.microsoft.sqlserver.jdbc.SQLServerDriver
	</property>
		<property name="hibernate.connection.password">test</property>
		<property name="hibernate.connection.url">
			jdbc:sqlserver://192.168.1.168:1433;
			DatabaseName=hibernate
	</property>
		<property name="hibernate.connection.username">test</property>
		<property name="hibernate.dialect">
			org.hibernate.dialect.SQLServerDialect
	</property>
		<property name="show_sql">true</property>
		<property name="hbm2ddl.auto">create</property>
		<mapping class="org.aaron.hibernate.entity.one2many.Phone" />
		<mapping class="org.aaron.hibernate.entity.one2many.Student" />
	</session-factory>
</hibernate-configuration>


测试类:

Main.java

package org.aaron.hibernate.entity.one2many;

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

import org.aaron.hibernate.util.HibernateUtil;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class Main {

	public static void main(String[] args) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction transaction = null;
		try {
			transaction = session.beginTransaction();
			
			Set<Phone> phoneNumbers = new HashSet<Phone>();
			phoneNumbers.add(new Phone("house","32354353"));
			phoneNumbers.add(new Phone("mobile","9889343423"));
			
			Student student = new Student("Eswar", phoneNumbers);
			session.save(student);
			
			transaction.commit();
		} catch (HibernateException e) {
			transaction.rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}

	}

}

Okay。

hibernate单向一对多关联映射(one-to-many)XML与注解版

单向一对多关联映射原理:  hibernate对于一对多的关系的处理,是通过操作classess端,间接操作或者自动操作Student端。比如添加,我直接添加classess端的数据,多个S...
  • u011781521
  • u011781521
  • 2017年05月04日 15:37
  • 862

spring mvc+hibernate 实现事务管理(全注解版)

为了方便项目变大配置文件变多,用注解代替 *.hbm.xml,,另外用反省实现dao操作,省去每个类一个dao,此处参考了鸵鸟的例子。 实现功能跟http://blog.csdn.net/wai...
  • u013433821
  • u013433821
  • 2015年09月27日 19:55
  • 410

one-to-many关系的更新问题

基本配置如下:  Java代码   学生实体               name="selectclasses"               lazy="false"...
  • huangmingleiluo
  • huangmingleiluo
  • 2014年11月14日 09:24
  • 755

Spring3与hibernate4集中式声明事务管理与注解式事务管理

Email:137268431@qq.com Blog:http://blog.csdn.net/LzwGlory 一.概述 还像往常一样先了解下基础知识: Hibernate是一个开源的ORM框...
  • a137268431
  • a137268431
  • 2013年11月14日 21:46
  • 6644

Hibernate使用之快速开始

以例子来引导快速使用Hibernate
  • heiantianshi1
  • heiantianshi1
  • 2015年09月09日 10:04
  • 3995

使用注解的Hibernate one-to-many映射

One to many映射关系指的是两个实体间一个实体可以和多个实体有关联关系,但是多的这一端只能和一的这一端的一个实例有关系。它是一个1 到 n的关系。例如在任何的公司员工可以注册多个银行账户,一个...
  • maoyeqiu
  • maoyeqiu
  • 2015年12月24日 23:32
  • 4172

深入理解Hibernate表与表之间的关联,搞懂cascade、inverse、lazy等属性,和注解版Hibernate实例

1.搞定Hibernate表与表之间的关联,搞懂cascade、inverse、lazy等属性
  • he90227
  • he90227
  • 2014年07月28日 13:34
  • 6102

Hibernate基于注解的双向one-to-many映射关系的实现

2、Hibernate基于注解的双向one-to-many映射关系的实现项目中用到了一对多的实体类关系映射,之前接触的都是基于配置文件的映射实现,但是公司的大部分都是基于注解的,因此自己参考之前的代码...
  • zxlqaz
  • zxlqaz
  • 2017年02月09日 16:48
  • 364

hibernate映射技巧one-to-many(单项一对多)

一对多关系在系统实现中也很常见。典型的例子就是父亲与孩子的关系。 而在我们现在的这个示例中,每个用户(TUser)都关联到多个地址(TAddress),如一个用户可能拥有办公室地址、家庭地址等多个地址...
  • zhangxiong0797
  • zhangxiong0797
  • 2014年05月19日 15:02
  • 480

hibernate学习4之one-to-many单向关联(不推荐)

一对多和多对一的映射策略是一样的,只是站的角度不同. 多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一 一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一...
  • gundumw100
  • gundumw100
  • 2017年04月10日 17:54
  • 92
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate One-to-Many using Annotations
举报原因:
原因补充:

(最多只允许输入30个字)