JPA之OneToOne映射的示例

来源:互联网 发布:java reflection enum 编辑:程序博客网 时间:2024/06/02 07:27

代码源自:《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@GeneratedValuepublic 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());}}}