hibernate單向無連接表1—N關係映射

1、首先創建數據庫本示例採用sql sever 2008 r2數據庫進行測試

創建address表

創建person表

2、在myeclipse中通過hibernate反向工程生成對應的實體類並做修改爲如下

創建address的實體類

package com.wxb.model;

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

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

import static javax.persistence.GenerationType.IDENTITY;

import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

/**
 * PersonInf entity.
 * 
 * @author 王校兵
 * @version 1.0, 2015-11-27
 */
@Entity
@Table(name = "address_inf")
public class AddressInf implements java.io.Serializable {

	// Fields

	private Integer addressId;
	private String addressDetial;
	private Set<PersonInf> personInf = new HashSet<PersonInf>();

	/** default constructor */
	public AddressInf() {
	}

	/** minimal constructor */
	public AddressInf(String addressDetial) {
		this.addressDetial = addressDetial;
	}

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "address_id")
	public Integer getAddressId() {
		return this.addressId;
	}

	@Column(name = "addressDetial", nullable = false)
	public String getAddressDetial() {
		return this.addressDetial;
	}
	
	@OneToMany
	@JoinColumn(name = "address_id")
	public Set<PersonInf> getPersonInf() {
		return personInf;
	}

	public void setAddressDetial(String addressDetial) {
		this.addressDetial = addressDetial;
	}

	public void setAddressId(Integer addressId) {
		this.addressId = addressId;
	}

	public void setPersonInf(Set<PersonInf> personInf) {
		this.personInf = personInf;
	}

}
創建person的實體類

package com.wxb.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.OneToOne;

import static javax.persistence.GenerationType.IDENTITY;

import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

/**
 * PersonInf entity.
 * 
 * @author 王校兵
 * @version 1.0, 2015-11-27
 */
@Entity
@Table(name = "person_inf")
public class PersonInf implements java.io.Serializable {

	private Integer personId;
	private Integer age;
	private String name;
	private Integer addressId;

	@Column(name = "address_id")
	public Integer getAddressId() {
		return addressId;
	}

	public Integer getAge() {
		return this.age;
	}

	public String getName() {
		return this.name;
	}

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "person_id")
	public Integer getPersonId() {
		return this.personId;
	}

	public void setAddressId(Integer addressId) {
		this.addressId = addressId;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

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

	public void setPersonId(Integer personId) {
		this.personId = personId;
	}

}

3、創建對應的測試類

測試向數據庫中插入數據

package com.wxb.dao;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.wxb.model.AddressInf;
import com.wxb.model.PersonInf;
import com.wxb.util.HibernateSessionFactory;
/**
 * 單向一對多關係映射測試類<span style="font-family: Arial; font-size: 14px; line-height: 26px; white-space: pre;">測試向數據庫中插入數據</span>
 * @author 王校兵
 * @version 1.0, 2015-11-28
 * */
public class SingleOneToNDao {
	public static void main(String[] args) {
		Session session = HibernateSessionFactory.getSession();
		Transaction ts = session.beginTransaction();
		
		PersonInf p = new PersonInf();
		p.setName("crazyit.org");
		p.setAge(21);
		
		PersonInf p1 = new PersonInf();
		p1.setName("crazy234it.org");
		p1.setAge(23234);
		
		PersonInf p11 = new PersonInf();
		p11.setName("sd.org");
		p11.setAge(2);
		
		AddressInf a = (AddressInf) session.get(AddressInf.class, 40);
		
		 
		p.setAddressId(a.getAddressId());
		p1.setAddressId(a.getAddressId());
		p11.setAddressId(a.getAddressId());
		
		session.save(p);
		session.save(p1);
		session.save(p11);
		ts.commit();
	}
}
測試讀取數據庫中的數據

package com.wxb.dao;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.wxb.model.AddressInf;
import com.wxb.model.PersonInf;
import com.wxb.util.HibernateSessionFactory;
/**
 * 單向一對多關係映射測試類,測試讀取數據
 * @author 王校兵
 * @version 1.0, 2015-11-28
 * */
public class SingleOneToOneReadDao {
	public static void main(String[] args) {
		Session session = HibernateSessionFactory.getSession();
		Transaction ts = session.beginTransaction();
		AddressInf a = (AddressInf)session.get(AddressInf.class, 40);
		System.out.println("a.getAddressDetial()-----   " + a.getAddressDetial());
		//System.out.println(a.getPersonInf().getClass());
		
		System.out.println(a.getPersonInf().size());
		for(PersonInf s:a.getPersonInf()){
			PersonInf p = (PersonInf)s;
			System.out.println(p.getName());
		}
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章