设为首页 加入收藏

TOP

jpa的双向一对多和双向一对一关联关系(二)
2015-07-20 17:44:20 来源: 作者: 【 】 浏览:6
Tags:jpa 双向 一对一 关联 关系
x.persistence.Id; import javax.persistence.OneToMany; @Entity public class Depart { private Integer id; private String departName; private String departNum; private Set emp; @Id @GeneratedValue public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(length=50,nullable=false,unique=true) public String getDepartName() { return departName; } public void setDepartName(String departName) { this.departName = departName; } public String getDepartNum() { return departNum; } public void setDepartNum(String departNum) { this.departNum = departNum; } @OneToMany(cascade={CascadeType.REMOVE,CascadeType.PERSIST},mappedBy="depart") public Set getEmp() { return emp; } public void setEmp(Set emp) { this.emp = emp; } }
一对多关联使用的注解是@OneToMany,cascade就不解释了,mappedBy属性主要用在关系被维护端,在这里就是一的这一边,mappedBy="depart"表明在关系维护端对应的属性为depart

package org.lxh.info;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Employee {
	private Integer id;
	private String num;
	private String name;
	private Depart depart;
       @Id @GeneratedValue
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getNum() {
		return num;
	}

	public void setNum(String num) {
		this.num = num;
	}
        @Column(nullable=false,length=50)
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
        @ManyToOne
        @JoinColumn(name="depart_id")
	public Depart getDepart() {
		return depart;
	}

	public void setDepart(Depart depart) {
		this.depart = depart;
	}
}

Employee作为关系维护端负责外键字段或外键记录的更新,体现在 数据库中则为从表,里面含有一个外键和depart相对应。@JoinColumn用来指定外键的列名,从程序可以看出这里的外键列名为depart_id


2 使用单元测试保存数据

package org.lxh.test;

import static org.junit.Assert.*;

import java.util.*;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import org.lxh.info.Depart;
import org.lxh.info.Employee;
import org.lxh.util.JpaUtil;

public class Test {

	@org.junit.Test
	public void testInsert() {
		EntityManager em=null;
		EntityTransaction tx=null;
		try{
		    em=JpaUtil.getEntityManager();
	            tx=em.getTransaction();
		    tx.begin();
		    Depart d=new Depart();
		    d.setDepartName("质量管理部");
		    d.setDepartNum("DP0001");
		    
		    Employee e=new Employee();
		    e.setDepart(d);
		    e.setName("李明");
		    e.setNum("C0001");
		    
		    Set
  
    emps=new HashSet
   
    (); emps.add(e); d.setEmp(emps);; em.persist(d); tx.commit(); }catch(Exception e){ e.printStackTrace(); }finally{ if(em!=null){ em.close(); } } } } 
   
  

下面是打印出的sql语句:

Hibernate: 
    insert 
    into
        Depart
        (departName, departNum) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        Employee
        (depart_id, name, num) 
    values
        (?, ?, ?)

这样数据就保存成功了,其他操作暂时忽略,大家可以自己写一写


二 一对一关联关系

一对一关联使用的场合相对较少,好多人都会把两个表并为一个,字段看起来很多但是操作起来着实方便

1 先来看看实体,我的例子是人员和人员信息详细表的对于关系

package org.lxh.info;

import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persi
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇ZOJ 3816 Generalized Palindromi.. 下一篇ZOJ 3811 Untrusted Patrol 并查集

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++中智能指针的性能 (2025-12-25 03:49:29)
·如何用智能指针实现c (2025-12-25 03:49:27)
·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)