hibernate 一对多映射

package com.entity.onetomany;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.OneToMany;

import com.entity.BaseEntity;
@Entity
public class Team extends BaseEntity{
	private String name;
	@OneToMany(mappedBy="team")
	//被Member类的team对象维护即Member.team
	private List<Member> members;

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<Member> getMembers() {
		return members;
	}
	public void setMembers(List<Member> members) {
		this.members = members;
	}

}

team.java

package com.entity.onetomany;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.NamedQuery;

import com.entity.BaseEntity;

@Entity
@NamedQuery(name = "aa", query = "select m from Member m where team_id=:tid")
public class Member extends BaseEntity {
	private String name;
	private int no;

	@ManyToOne(cascade=CascadeType.PERSIST)
	//级联保存  保存member的时候自动保存team
	@JoinColumn(name="team_id")
	//外键team_id
	//member为多的一方 所以由member来维护
	private Team team;

	public int getNo() {
		return no;
	}

	public void setNo(int no) {
		this.no = no;
	}

	public Team getTeam() {
		return team;
	}

	public void setTeam(Team team) {
		this.team = team;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

member.java

package com;

import java.util.List;
import java.util.Map;

import javax.persistence.Entity;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.annotations.NamedQuery;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.hibernate.transform.Transformers;
import org.jboss.logging.annotations.Transform.TransformType;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.entity.onetomany.Member;
import com.entity.onetomany.Team;

public class TestOneToMany {
	private Session s;
	private Transaction tran;
	@Before
	public void before(){
		s=HibernateUtils.getSession();
		tran=s.beginTransaction();
	}

	public void one2many(){
		Team team=new Team();
		Team team1=new Team();
		team.setName("lakers");
		team1.setName("thunder");
		Member member1=new Member();
		member1.setName("kobe");
		member1.setTeam(team);//建立关系
		Member member2=new Member();
		member2.setName("nash");
		member2.setTeam(team);//建立关系
		Member member3=new Member();
		member3.setName("boozer");
		member3.setTeam(team);//建立关系
		Member member4=new Member();
		member4.setName("westbrook");
		member4.setTeam(team1);//建立关系
		Member member5=new Member();
		member5.setName("durant");
		member5.setTeam(team1);//建立关系
		Member member6=new Member();
		member6.setName("ibaka");
		member6.setTeam(team1);//建立关系
		s.persist(member1);
		s.persist(member2);
		s.persist(member3);
		s.persist(member4);
		s.persist(member5);
		s.persist(member6);
	}
                public void one2manyquery(){
    		Team team= (Team)s.get(Team.class, 1);
		//获得team对象
		for(Member m:team.getMembers()){
			System.out.println(m.getName());
		}
	}
	@After
	public void after(){
		tran.commit();
		HibernateUtils.closeSession(s);
	}
}

testonetomany.java

时间: 2024-10-15 06:18:08

hibernate 一对多映射的相关文章

【Hibernate】(4)Hibernate一对多映射

1. 一对多关联 (1). 创建工程与数据库 打开MyEclipse,创建工程导入所需要的jar包,配置hibernate.cfg.xml文件: <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

【hibernate】&lt;第二节&gt;hibernate的一对多映射(基本类型)

所需工具与前文一致! 第一部分内容:基本类型的一对多(one to many) 以部门表与员工表为例: 目录结构: hibernate.cfg.xml内容 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4

【SSH系列】Hibernate映射 -- 一对多关联映射

    映射原理       一对多关联映射和多对一关联映射的映射原理是一样一样的,所以说嘛,知识都是相通的,一通百通,为什么说一对多关联映射和多对一关联映射是一样的呢?因为她们都是在多的一端加入一个外键,指向一的一段,关联关系都是在多的一端进行维护,只是我们在写映射的时候发生了变化.       一对多和多对一的映射原理是一样的,但是她们之间也存在着小小的区别,毕竟世界上没有两片完全相同的叶子,她们之间的区别就是维护的关系不同,我们先来看多对一,多端维护一端的关系,在加载多端的时候,可以将一端

Hibernate映射解析——关联映射(一)

上篇我们谈到了Hibernate的基本映射,接下来为大家介绍Hibernate的多对一关联映射. 多对一关联映射:在多的一端加了个外键,外键指向一的一端,这样的好处是让Hibernate访问多的一端的时候,自动把1端给加上. 对象模型图: 关系模型图: 多对一关联映射主要是靠下面一句来进行维护,即在多的一端加上如下标签 <many-to-noe name="group"  column="groupid"/> User.hbm.xml配置文件: <

java使用Myeclipse创建Hibernate项目碰到的诸多问题总结

这两天一直在搞Myeclipse创建Hibernate的1对多映射. 由于缺乏经验,可算是把我坑惨了.控制台是不停地报错啊~~~~我差点就崩溃了. 1.看的是慕课网的Hibernate一对多映射教程,由于老师Myeclipse的Hibernate高版本是3.3,于是老师就自己 下载了4.3版本,拖拽到项目中,然后所有的文件(hibernate.cfg.xml:**.hbm.xml:sessionFactory工具类以 及持久化类和SQL生成表的代码)都是手写~~~ 2.然后我稍微看了一下马士兵老

Hibernate基本使用

没有一对多和多对多关系的类配置文件: <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibe

解决You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near &#39;order (order_name, customer)

在学习hibernate一对多映射关系时,根据视频学习的时候,例子是顾客和订单的问题,一个顾客有多个订单.按照视频中的敲代码出现了You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order (order_name, customer) 原因是order是mysql关键字,不能做

【Hibernate步步为营】--(一对多映射)之双向关联

上篇文章讨论了单向关联的一对多映射,在一的一端维护双向的关系这样的做法尽管能实现可是存在非常多缺陷,首先生成非常多多余的SQL语句,由于多的一端不维护关系,仅仅有一的一端维护,在进行操作时一的一端会发出多余的update语句:其次,由于多的一端不知道一的一端存在,所以在保存多的一端时假设外键为null值,而且在设计数据库时关系字段设为非空,则将无法保存数据.由于单向关联一对多存在非常多缺点那就没有其他的办法了吗,能够採用双向关联来优化. 一.一对多双向关联 这里继续採用上篇文章的学生和班级作为演

Hibernate学习4—关联关系一对多映射

一.班级学生一对多映射实现(单向) Class 1 * Student 一对多 在学生多的一方,配置一的对象: com.cy.model.Class: package com.cy.model; public class Class { private long id; private String name; public long getId() { return id; } public void setId(long id) { this.id = id; } public String