package com.bjpowernode.hibernate;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Session;
import junit.framework.TestCase;
public class ExtendsTest extends TestCase {
public void testSave1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Pig pig = new Pig();
pig.setName("小猪猪");
pig.setSex(true);
pig.setWeight(200);
session.save(pig);
Bird bird = new Bird();
bird.setName("小鸟鸟");
bird.setSex(false);
bird.setHeight(100);
session.save(bird);
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
/**
* 采用load查询,通过Pig查询
*/
public void testLoad1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Pig pig = (Pig)session.load(Pig.class, 1);
System.out.println(pig.getName());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
/**
* 采用load查询,通过Animal查询
*/
public void testLoad2() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Animal a = (Animal)session.load(Animal.class, 1);
System.out.println(a.getName());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
/**
* 采用load查询,通过Animal查询
*/
public void testLoad3() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Animal a = (Animal)session.load(Animal.class, 1);
//因为load默认支持lazy,所以我们看到的是Animal的代理
//所以采用instanceof无法鉴别出真正的类型Pig
//所load在此情况下是不支持多态查询的
//多态查询:hibernate在加载数据的时候,能够采用instancof鉴别出其真正的类型
if (a instanceof Pig) {
System.out.println(a.getName());
}else {
System.out.println("不是猪!");
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
/**
* 采用load查询,通过Animal查询
* 将<class>标签中的lazy设置为false
*/
public void testLoad4() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Animal a = (Animal)session.load(Animal.class, 1);
//可以正确判断出其真正的类型
//因为映射文件中lazy设置为false,返回的不再是代理类而是真正的类型
//所以可以鉴别出来
//此种情况下load是支持多态查询的
if (a instanceof Pig) {
System.out.println(a.getName());
}else {
System.out.println("不是猪!");
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
/**
* 采用get查询,通过Animal查询
*/
public void testLoad5() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Animal a = (Animal)session.get(Animal.class, 1);
//可以鉴别出其真正的类型,因为get返回的就是具体类
//get是支持多态查询的
if (a instanceof Pig) {
System.out.println(a.getName());
}else {
System.out.println("不是猪!");
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
/**
* 采用hql查询Animal
*/
@SuppressWarnings("unchecked")
public void testLoad6() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
List animalList = session.createQuery("from Animal").list();
for (Iterator iter=animalList.iterator(); iter.hasNext();) {
Animal a = (Animal)iter.next();
//采用hql查询返回的是真正的类型,所以hql支持多态查询
if (a instanceof Pig) {
System.out.println(a.getName());
}else if (a instanceof Bird) {
System.out.println(a.getName());
}
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
/**
* 采用hql查询Animal
*/
@SuppressWarnings("unchecked")
public void testLoad7() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
List list = session.createQuery("from java.lang.Object").list();
for (Iterator iter=list.iterator(); iter.hasNext();) {
Object o = iter.next();
if (o instanceof Pig) {
System.out.println(o);
}else if (o instanceof Bird) {
System.out.println(o);
}
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}