当前页面: 开发资料首页 → Eclipse 专题 → Eclipse快速上手Hibernate--4. 继承映射(1)
摘要: Eclipse快速上手Hibernate--4. 继承映射(1)
Animal.java
/*
* Hibernate - 继承映射(每个类层次一个表)
* 创建日期 2005-4-9
* @author javamxj(分享java快乐)
* @link Blog: htpp://javamxj.mblogger.cn
* htpp://blog.csdn.net/javamxj/
*/
package javamxj.inheritance.one;
/**
* @hibernate.class
* table="Animal"
* discriminator-value="Animal"
* @hibernate.discriminator
* column="ANIMAL_TYPE"
* type="string"
* length = "10"
*/
public abstract class Animal {
private Long id;
private String name;
/**
* @hibernate.id
* column="ID"
* generator-class="hilo"
* unsaved-value="null"
*/
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
/**
* @hibernate.property
* length = "24"
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void makeSound();
}
package javamxj.inheritance.one;
/**
* @hibernate.subclass
* discriminator-value="Cat"
*/
public class Cat extends Animal {
private String FurColor;
public void makeSound() {
System.out.println("喵喵");
}
/**
* @hibernate.property
* length = "24"
*/
public String getFurColor() {
return FurColor;
}
public void setFurColor(String furColor) {
FurColor = furColor;
}
}
</td></tr>package javamxj.inheritance.one;
/**
* @hibernate.subclass
* discriminator-value="Dog"
*/
public class Dog extends Animal {
private String category;
public void makeSound() {
System.out.println("汪汪");
}
/**
* @hibernate.property
* length = "24"
*/
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
}
</td></tr>build.xml
<?xml version="1.0" encoding="GBK"?>
Animal.hbm.xml
<?xml version="1.0" encoding="GBK"?>
hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
To add non XDoclet generator parameters, create a file named
hibernate-generator-params-Animal.xml
containing the additional parameters and place it in your merge dir.
To add non XDoclet property mappings, create a file named
hibernate-properties-Animal.xml
containing the additional properties and place it in your merge dir.
To add non XDoclet property mappings, create a file named
hibernate-properties-Cat.xml
containing the additional properties and place it in your merge dir.
To add non XDoclet property mappings, create a file named
hibernate-properties-Dog.xml
containing the additional properties and place it in your merge dir.
<?xml version="1.0" encoding="GBK"?> hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"></td></tr>net.sf.hibernate.dialect.MySQLDialect true false root javamxj com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/HibernateTest?useUnicode=true&characterEncoding=GBK
Demo.java
package javamxj.inheritance.one;
import java.util.Iterator;
import java.util.List;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.cfg.Configuration;
public class Demo {
public static void main(String[] args) {
try {
new Demo();
} catch (HibernateException he) {
he.printStackTrace();
}
}
public Demo() throws HibernateException {
SessionFactory sf = new Configuration().configure()
.buildSessionFactory();
Session sess = sf.openSession();
Transaction tx = null;
try {
tx = sess.beginTransaction();
Cat cat = new Cat();
cat.setName("小白");
cat.setFurColor("白色");
sess.save(cat);
Dog dog = new Dog();
dog.setName("小黑");
dog.setCategory("京巴狗");
sess.save(dog);
tx.commit();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
throw e;
} finally {
sess.close();
}
sess = sf.openSession();
tx = null;
try {
tx = sess.beginTransaction();
List animals = sess.find("from " + Animal.class.getName());
for (Iterator it = animals.iterator(); it.hasNext();) {
Animal animal = (Animal) it.next();
System.out.println("动物 '" + animal.getName()
+ "' 所在类是: " + animal.getClass().getName());
System.out.print("发出叫声: ");
animal.makeSound();
}
tx.commit();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
throw e;
} finally {
sess.close();
}
}
}