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