您的位置:首页 > 编程语言 > Java开发

Hibernate04(无连接表的双向1-N关联)

2016-06-03 09:11 465 查看
package com.dt.pojo;

import java.util.HashSet;

import java.util.Set;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.ManyToOne;

import javax.persistence.OneToMany;

import javax.persistence.Table;

import org.hibernate.annotations.Cascade;

import org.hibernate.annotations.CascadeType;

/**

 * 无连接表的双向1-N关联,只需在N的一端增加@ManyToOne注解实体来修饰代表关联的实体即可,而且1的一端需要增加@OneToMany

 * 数据库为了记录这种关系,只需在N的一端表里添加外键即可(@ManyToOne,使用@JoinColumn来映射外键列)

 * 

 * 

 * */

@Entity

@Table(name="person_inf")

public class Person {

@Id
@Column(name="person_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)

    private Integer id ;

    private String name;

    private Integer age;

    

    //mappedBy="person"属性表明该Person实体不控制关联关系

    @OneToMany(targetEntity=Address.class,mappedBy="person") //定义person实体关联的address实体

    private Set<Address> addresses = new HashSet<Address>();

    

    
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
p
4000
ublic Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Set<Address> getAddresses() {
return addresses;
}
public void setAddresses(Set<Address> addresses) {
this.addresses = addresses;
}

    

}

package com.dt.pojo;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.ManyToOne;

import javax.persistence.Table;

@Entity

@Table(name="address_inf")

public class Address {

@Id
@Column(name="address_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer addressId;
private String addressDetail;

//定义Address实体关联的Person实体
@ManyToOne(targetEntity=Person.class)
@JoinColumn(name="person_id",referencedColumnName="person_id",nullable=false)
private Person person;

public Address(String addressDetail) {
super();
this.addressDetail = addressDetail;
}
public Integer getAddressId() {
return addressId;
}
public void setAddressId(Integer addressId) {
this.addressId = addressId;
}
public String getAddressDetail() {
return addressDetail;
}
public void setAddressDetail(String addressDetail) {
this.addressDetail = addressDetail;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}

}

package com.dt.util;

import org.hibernate.Transaction;

import com.dt.pojo.Address;

import com.dt.pojo.Person;

import org.hibernate.Session;

import java.util.*;

/**

 * @author  dt 双向1-N无表连接

 * @version  1.0

 */

public class PersonManager

{
public static void main(String[] args)
{
PersonManager mgr = new PersonManager();
mgr.createAndStorePerson();
HibernateUtil.sessionFactory.close();
}
private void createAndStorePerson()
{
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
// 创建Person对象
Person person = new Person();
person.setAge(26);
person.setName("张三");
session.save(person);

Address a1 = new Address("广州天河"); //创建一个瞬时态对象
  a1.setPerson(person);

a1.setPerson(person);
session.persist(a1);

Address a2 = new Address("111111"); //创建一个瞬时态对象
a2.setPerson(person);
session.persist(a2);

   

tx.commit();
HibernateUtil.closeSession();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate java spring