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