hibernate的onetoone映射分为一对一主键映射-外键映射-单向-mysql数据库
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
/**
* hibernate 1对1映射
* 外键映射
* 单向
* @author WuJieJecket
*
*/
@Table(name="DCLASS")
@Entity(name="DCLASS")
@SuppressWarnings("serial")
public class Dclass implements Serializable {
private String classname;
private Dstudent dst;
/**
* @return the classname
*/
@Id
@Column(name="CLASSNAME")
public String getClassname() {
return classname;
}
/**
* @param classname the classname to set
*/
public void setClassname(String classname) {
this.classname = classname;
}
/**
* @return the dst
*/
//cascade=CascadeType.MERGE
//或者写多个cascade={CascadeType.MERGE,CascadeType.DETACH}
//CascadeType.PERSIST 级联保存
//CascadeType.MERGE 级联更新
//CascadeType.DETACH 未知级联
//CascadeType.REMOVE 级联删除
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)//级联更新设置,否则Dclass和Sstudent需要单独保存了
@JoinColumn(name="fid")//指定主表外键名字
public Dstudent getDst() {
return dst;
}
/**
* @param dst the dst to set
*/
public void setDst(Dstudent dst) {
this.dst = dst;
}
}
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Table(name="DSTUDENT")
@Entity(name="DSTUDENT")
@SuppressWarnings("serial")
public class Dstudent implements Serializable {
@Id
@Column(name="STUDENTNAME")
private String studentname;
/**
* @return the studentname
*/
public String getStudentname() {
return studentname;
}
/**
* @param studentname the studentname to set
*/
public void setStudentname(String studentname) {
this.studentname = studentname;
}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库驱动 -->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- 链接数据库的url -->
<property name="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<!-- 数据库链接用户名 -->
<property name="connection.username">用户名</property>
<!-- 数据库链接密码 -->
<property name="connection.password">密码</property>
<!-- sql方言 -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!-- 是否打印sql语句 -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping class="hibernate.dfonetoone.Dclass" />
<mapping class="hibernate.dfonetoone.Dstudent" />
</session-factory>
</hibernate-configuration>
测试方法
@Test
public void testOnetoone(){
HIbernateUtil hbu=new HIbernateUtil();
Session s=hbu.getSession();
s.beginTransaction();
Dstudent dst=new Dstudent();
dst.setStudentname("小明"+hbu.returnid());
Dclass dc=new Dclass();
dc.setClassname("语文"+hbu.returnid());
dc.setDst(dst);
s.save(dc);
s.getTransaction().commit();
s.close();
}