Hibernate注解版用一对一实例

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

   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静山晚风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值