2012年3月25日 hibernate

原创 2012年03月26日 00:03:05

基本hibernate所需的Jar包


hibernate-annotations所需的Jar包


在此基础上用log4j 显示日志所需的Jar包




hibernate.cfg.xml文件 最好不要用其它名字,不然要在configure()方法中加参数

        
        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        property name="hbm2ddl.auto">update</property>
        <mapping resource="com/wx/hibernate/Student.hbm.xml"/>
        <!-- 使用hibernate-annotations~~ 目前主要使用 -->
        <mapping class="com.wx.hibernate.Teacher"/>

domain model:TeacherPK.java|Teacher.java


//联合主键第一种 @Embeddable + @id 
//类要实现Serializable接口,重写equals和hashCode方法
//@Embeddable
public class TeacherPK implements java.io.Serializable{
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public boolean equals(Object o) {
		if(o instanceof TeacherPK) {
			TeacherPK pk = (TeacherPK)o;
			if(this.id == pk.getId() && this.name.equals(pk.getName())) {
				return true;
			}
		}
		return false;
	}
	
	@Override
	public int hashCode() {
		return this.name.hashCode();
	}



//定义生成器的名字(下面id处指定这个生成器)
@Entity
@TableGenerator(
	    name="Teacher_GEN",
	    table="GENERATOR_TABLE",
	    pkColumnName = "pk_key",
	    valueColumnName = "pk_value",
	    pkColumnValue="Teacher",
	    allocationSize=1
	)
@SequenceGenerator(name="teacherSEQ", sequenceName="teacherSEQ_DB")
//@IdClass(TeacherPK.class)
//联合主键第三种 @IdClass + @id + @id 
public class Teacher {
	//private TeacherPK pk;
	private int id;
	private String name;
	private String title; 
	private String yourWifeName;
	private Date birthDate;
	private boolean good;
	private Gender gender;
	
	//枚举类型
	@Enumerated(EnumType.STRING)
	public Gender getGender() {
		return gender;
	}
	public void setGender(Gender gender) {
		this.gender = gender;
	}
	public boolean isGood() {
		return good;
	}
	public void setGood(boolean good) {
		this.good = good;
	}
	//透明
	@Transient
	public String getYourWifeName() {
		return yourWifeName;
	}
	public void setYourWifeName(String yourWifeName) {
		this.yourWifeName = yourWifeName;
	}

	//指定id生成策略  和 所用的生成器的名字(应该是不能和联合主键一起用,已测~)
	@Id
	@GeneratedValue(strategy=GenerationType.TABLE, generator="Teacher_GEN")
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	//@Id
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	//时间精度
	@Temporal(TemporalType.TIME)
	public Date getBirthDate() {
		return birthDate;
	}
	public void setBirthDate(Date birthDate) {
		this.birthDate = birthDate;
	}
	
	/*@EmbeddedId
	 //联合主键第二种 直接@EmbeddedId (个人选这种)
	public TeacherPK getPk() {
		return pk;
	}
	public void setPk(TeacherPK pk) {
		this.pk = pk;
	}*/

JUnit测试类:(建议放在新建的Source Folder-test下)

private static SessionFactory sessionFactory;
	
	@BeforeClass
	public static void beforeClass() {
			sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
	}
	@AfterClass
	public static void afterClass() {
		sessionFactory.close();
	}
		
	@Test
	public void testTeacherSave() {	
		Teacher t = new Teacher();
		//t.setId(1);
		t.setName("t1");
		t.setTitle("middle");
		t.setGender(Gender.FEMALE);
		t.setBirthDate(new Date());
		
		//getCurrentSession() 与 openSession() 
		//openSession每次new一个Session对象(新的hibernate不推荐使用)
		Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		session.save(t);
		session.getTransaction().commit();
	}


相关文章推荐

【瑞德石油】美原油库存增加,油价反弹上涨受阻(2015年3月25日)

美国NYMEX 5月原油期货价格周二(3月24日)收盘上涨0.06美元,涨幅0.13%,报47.51美元/桶,欧市尾盘一度刷新日高至48.56美元/桶,但在美国通胀率回暖提振美元、且美国原油库存数据即...

笔记(3月25日)

早上: 1:重点在于开发环境的设置 2:编程基础 3:Java语言介绍、main函数、类文件介绍 笔记: 1:常用的DOS命令 A:盘符切换 盘符: 然后回车 B:列出当前目录下的文件...

2017年3月25日工作日志:Jquery使用小结[绑定事件判断、select标签、军官证正则]

jQuery获取DOM绑定事件 在1.8.0版本之前,我们要想获取某个DOM绑定的事件处理程序可以这样: $.data(domObj,'events');//或者$('selector').data(...

2013年3月25日MFC学习笔记

1.某视频第二集,前两天看的了。。。现在回忆加总结。 2.C++创建窗口程序的过程:1)设计窗口类2)注册窗口类3)产生窗口4)显示更新窗口 在MFC中其实过程也是如此,只不过MFC把很多常用的程...

2012年3月19日学习

一.设计模式 建造者模式,这个模式比较陌生,暂时没有想到如何在实际的项目中运用,只是简单的通过书中的案例进行了实现 定义   将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建...

2012年3月21日学习

一、设计模式   1.抽象工厂模式:用于创建不同抽象属性的产品   2.反射模式 JAVA反射机制定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性...

第10期 免费讲座 2012年3月24日–”tizen”

三月春风惹人醉,三月桃花随风飞,在这个肆意绽放春意的时节,CLKG为大家邀请到了谁呢? Intel中国Linux和开源战略经理-陈绪博士,他将为大家作一场关于”tizen”的报告。相信对Tizen熟悉...
  • aka522
  • aka522
  • 2012年03月12日 11:42
  • 84

猜叔叔的出生年月日 今年的植树节(2012年3月12日),小明和他的叔叔还有小伙伴们一起去植树。

package org.bluebridge.topics; /* * 猜叔叔的出生年月日 今年的植树节(2012年3月12日),小明和他的叔叔还有小伙伴们一起去植树。 休息的时候,小明的同学...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2012年3月25日 hibernate
举报原因:
原因补充:

(最多只允许输入30个字)