1 写三个数据库表,两个基础表,一个关联外键表,个人认为可以用两个表代替,用三个表的原因个人理解为是因为互为外键,建立的时候没有基础表,所以澡了第三个表,可以,先建立一个,然后更改表约束,应该也可以【此想法尚未验证】
主要是前三步重要,后面几步没有什么特别的,不是很重要
CREATE TABLE `studentbasict` (
`studentId` int(11) NOT NULL auto_increment,
`sex` varchar(10) default NULL,
`studentName` varchar(10) default NULL,
PRIMARY KEY (`studentId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `studentdetailt` (
`detailId` int(11) NOT NULL auto_increment,
`homeAddress` varchar(50) default NULL,
`homePhoneNumber` varchar(100) default NULL,
PRIMARY KEY (`detailId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `basicdetail` (
`detailId` int(11) default NULL,
`studentId` int(11) NOT NULL,
PRIMARY KEY (`studentId`),
UNIQUE KEY `detailId` (`detailId`),
KEY `FKEAEC91FF9E05C387` (`detailId`),
KEY `FKEAEC91FF7CDB817A` (`studentId`),
CONSTRAINT `FKEAEC91FF7CDB817A` FOREIGN KEY (`studentId`) REFERENCES `studentbasict` (`studentId`),
CONSTRAINT `FKEAEC91FF9E05C387` FOREIGN KEY (`detailId`) REFERENCES `studentdetailt` (`detailId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
2 基础类
1)
package com.hib.one2;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity(name="StudentBasic")
@Table(name="studentBasict")
public class StudentBasic implements Serializable{
private static final long serialVersionUID = 691350277643811847L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="studentId")
private Integer studentId;
@Column(length=10)
private String studentName;
@Column(length=10)
private String sex;
@OneToOne(cascade = CascadeType.ALL)
@JoinTable(name ="basicdetail",
joinColumns =@JoinColumn(name="studentId"),
inverseJoinColumns =@JoinColumn(name="detailId",unique=true))
private StudentDetail studentDetail;
public StudentBasic() {
}
public Integer getStudentId() {
return studentId;
}
public void setStudentId(Integer studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public StudentDetail getStudentDetail() {
return studentDetail;
}
public void setStudentDetail(StudentDetail studentDetail) {
this.studentDetail = studentDetail;
}
}
3 基础类2)
package com.hib.one2;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity(name="StudentDetail")
@Table(name="studentDetailt")
public class StudentDetail implements Serializable{
private static final long serialVersionUID = 2038888147029653370L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer detailId;
@Column(length=50)
private String homeAddress;
@Column(length=100)
private String homePhoneNumber;
@OneToOne(mappedBy="studentDetail",cascade=CascadeType.ALL)
private StudentBasic basic;
public StudentDetail() {
}
public String getHomeAddress() {
return homeAddress;
}
public void setHomeAddress(String homeAddress) {
this.homeAddress = homeAddress;
}
public String getHomePhoneNumber() {
return homePhoneNumber;
}
public void setHomePhoneNumber(String homePhomeNumber) {
this.homePhoneNumber = homePhomeNumber;
}
public Integer getDetailId() {
return detailId;
}
public void setDetailId(Integer detailId) {
this.detailId = detailId;
}
public StudentBasic getBasic() {
return basic;
}
public void setBasic(StudentBasic basic) {
this.basic = basic;
}
}
4 测试类
package com.hib.one2;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.hib.HibernateUtil;
public class Test {
public void save(){
Session session=HibernateUtil.getSession();
Transaction tx =session.beginTransaction();
try{
StudentBasic basic=new StudentBasic();
basic.setStudentName("gyf");
basic.setSex("1");
session.persist(basic);
StudentDetail detail=new StudentDetail();
detail.setHomeAddress("2222");
detail.setHomePhoneNumber("11111");
detail.setBasic(basic);
//session.persist(detail);
basic.setStudentDetail(detail);
session.save(basic);
tx.commit();
}catch(Exception e){
e.printStackTrace();
tx.rollback();
}
session.close();
}
public void list(){
Session session=HibernateUtil.getSession();
//StudentDetail detail=(StudentDetail)session.createQuery("select b from StudentDetail b").iterate().next();
List list=session.createQuery("select b from StudentBasic b").list();
System.out.println(list.size());
session.close();
}
public static void main(String[] args){
Test t=new Test();
t.list();
}
}
5 固定的获取session的注解类
package com.hib;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
/**
* @author bubble
*
*/
public class HibernateUtil {
// single
private static final SessionFactory sessionFactory;
static {
try {
// class AnnotationConfiguration:读取关于Annotation的配置
sessionFactory = new AnnotationConfiguration().configure("/hibernate.cfg.xml")
.buildSessionFactory();
} catch (Throwable e) {
throw new ExceptionInInitializerError(e);
}
}
// static method to get session
public static Session getSession() throws HibernateException {
return sessionFactory.openSession();
}
// close session factory
public static void closeSessionFactory() {
sessionFactory.close();
}
}
6) 主配置文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/wanjutest
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">mysql5</property>
<property name="show_sql">true</property>
<!-- annotation part -->
<!-- <mapping class="com.hib.User" />
<mapping class="com.hib.Grade" />
<mapping class="com.hib.one.Grade" />
<mapping class="com.hib.one.People" /> -->
<mapping class="com.hib.one2.StudentBasic" />
<mapping class="com.hib.one2.StudentDetail" />
</session-factory>
</hibernate-configuration>
7 测试结果
六月 15, 2013 4:45:49 下午 org.hibernate.search.impl.ConfigContext getLuceneMatchVersion
WARN: HSEARCH000075: Configuration setting hibernate.search.lucene_version was not specified, using LUCENE_CURRENT.
Hibernate: select studentbas0_.studentId as studentI1_1_, studentbas0_.sex as sex2_1_, studentbas0_.studentName as studentN3_1_, studentbas0_1_.detailId as detailId1_0_ from studentBasict studentbas0_ left outer join basicdetail studentbas0_1_ on studentbas0_.studentId=studentbas0_1_.studentId
0