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());
}
}
}