JPA之OneToOne映射的示例

代码源自:《EJB3.0实例教程》的源码。

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
   
 <persistence-unit name="OneToOnePU" transaction-type="JTA">
    <jta-data-source>java:/MySqlDS</jta-data-source>
    <properties><property name="hibernate.hbm2ddl.auto" value="create-drop"/></properties>
 </persistence-unit>
 
</persistence>

 

IDCard.java:

package com.cecltd.domain;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;


@SuppressWarnings("serial")
@Entity
@Table(name = "IDCard")
public class IDCard  implements Serializable{
	
    private Integer id;
    private String cardno;    
    private Person person;
  
    public IDCard() {
    }
    
    public IDCard(String cardno) {
        this.cardno = cardno;
    }
    
    @Id
    @GeneratedValue   
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    
    @Column(nullable=false,length=18,unique = true)
    public String getCardno() {
        return cardno;
    }
    public void setCardno(String cardno) {
        this.cardno = cardno;
    }
    
    @OneToOne(optional = false, cascade = CascadeType.REFRESH)
    @JoinColumn(name = "Person_ID", referencedColumnName = "personid",unique = true)  
    public Person getPerson() {
        return person;
    }
    public void setPerson(Person person) {
        this.person = person;
    }
}

Person.java:

package com.cecltd.domain;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@SuppressWarnings("serial")
@Entity
@Table(name = "Person")
public class Person implements Serializable {

	private Integer personid;
	private String name;
	private boolean sex;
	private Short age;
	private Date birthday;
	private IDCard idcard;

	@Id
	@GeneratedValue
	public Integer getPersonid() {
		return personid;
	}

	public void setPersonid(Integer personid) {
		this.personid = personid;
	}

	@Column(name = "PersonName", nullable = false, length = 32)
	public String getName() {
		return name;
	}

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

	@Column(nullable = false)
	public boolean getSex() {
		return sex;
	}

	public void setSex(boolean sex) {
		this.sex = sex;
	}

	@Column(nullable = false)
	public Short getAge() {
		return age;
	}

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

	@Temporal(value = TemporalType.DATE)
	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	@OneToOne(optional = true, cascade = CascadeType.ALL, mappedBy = "person")
	public IDCard getIdcard() {
		return idcard;
	}

	public void setIdcard(IDCard idcard) {
		this.idcard = idcard;
	}
}

OneToOneDAO.java:

package com.cecltd.ejb3;

import java.util.Date;

import com.cecltd.domain.Person;

public interface OneToOneDAO {
    
    public void insertPerson(String name, boolean sex,short age, Date birthday,String cardID);
    public Person getPersonByID(Integer orderid);
    public void updatePersonInfo(Integer personid, String newname, String newIDcard);
    public void deletePerson(Integer personid);
}

OneToOneDAOBean.java:

package com.cecltd.ejb3.impl;

import java.util.Date;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.cecltd.domain.IDCard;
import com.cecltd.domain.Person;
import com.cecltd.ejb3.OneToOneDAO;

@Stateless
@Remote ({OneToOneDAO.class})
public class OneToOneDAOBean implements OneToOneDAO {
	
    @PersistenceContext
    protected EntityManager em;

    public void insertPerson(String name, boolean sex,short age, Date birthday,String cardID) {
        Person person = new Person();
        person.setName(name);
        person.setSex(sex);
        person.setAge(Short.valueOf(age));
        person.setBirthday(birthday);
        IDCard idcard = new IDCard(cardID);
        idcard.setPerson(person);
        person.setIdcard(idcard);
        em.persist(person);        
    }

    public Person getPersonByID(Integer personid) {
        Person person = em.find(Person.class, personid);
        return person;
    }

    public void updatePersonInfo(Integer personid, String newname, String newIDcard) {
        Person person = em.find(Person.class, personid);
        if (person!=null) {
            person.setName(newname);
            if (person.getIdcard()!=null){
                person.getIdcard().setCardno(newIDcard);
            } 
            em.merge(person);
        }
    }    

    public void deletePerson(Integer personid) {
        Person person = em.find(Person.class, personid);
        if (person!=null) em.remove(person);
    }
}

 

测试代码:OneToOneClient.java:

package test;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.cecltd.domain.Person;
import com.cecltd.ejb3.OneToOneDAO;

public class OneToOneClient {

	public static void main(String[] args) throws NamingException {
		
		Properties props = new Properties();
		props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
        props.setProperty("java.naming.provider.url", "127.0.0.1:1099");
        props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");

		InitialContext ctx = new InitialContext(props);
		try {
			String outformate = "";
			OneToOneDAO oneToonedao = (OneToOneDAO) ctx.lookup("OneToOneDAOBean/remote");
			SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
			SimpleDateFormat formatter1 = new SimpleDateFormat("MMddhhmmss");
			String endno = formatter1.format(new Date()).toString();
			oneToonedao.insertPerson("月影传说", true, (short)26, formatter.parse("1981-06-01"), "44011"+endno);
			//添加时请注意,身份证号不要重复,因为数据库字段身份证号是唯一的
			Person person = oneToonedao.getPersonByID(new Integer(1)); 
			if (person!=null){
				System.out.println(outformate +"寻找编号为1的人员");
				System.out.println("姓名:"+ person.getName() +" 身份证:"+ person.getIdcard().getCardno());
			}else{
				System.out.println("没有找到编号为1的人员");
			}

			System.out.println(outformate +"更新编号为1的人员的姓名为火影忍者,身份证号为33012" +endno +"");
			oneToonedao.updatePersonInfo(new Integer(1), "火影忍者", "33012" +endno);			
			
			System.out.println("================删除编号为3的人员==============");	
			oneToonedao.deletePerson(new Integer(3));
			
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值