Hibernate03(无连接表的单项1-N关联)

package com.dt.pojo;


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关联,因为1的一端需要访问N的一端,而且N的一端将以集合Set形式表示
 * 程序是需要在N的一端增加一个外键列来维护关系,因为是由1的一端来控制关联关系,因此直接在1的一端用@JoinColumn修饰Set集合映射外键列即可
 * 
 * */












@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;
    
    
    @OneToMany(targetEntity=Address.class) //定义person实体关联的address实体
    @JoinColumn(name="person_id",referencedColumnName="person_id") //映射外键关联。指定外键列的列名是person_id
    private Set<Address> addresses;
    
    
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;
}
public 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.Table;


@Entity
@Table(name="address_inf")
public class Address {


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



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


}




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("张三");

Address a1 = new Address("广州天河"); //创建一个瞬时态对象
session.persist(a1); //必须先持久化address

//设置person和addrss之间的关联关系
person.getAddresses().add(a1);

//持久化Person
session.save(person);


//创建另一个瞬时态address
Address a2 = new Address("上海虹口"); 
session.persist(a2);//必须先持久化address

//修改持久化状态Person
person.getAddresses().add(a2);






   

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值