Hibernate Table per class hierarchy xml based tutorial with example program


columns declared by the subclasses, such as features, languages cannot have NOT NULL constraints.Exactly one table is created for table per class. There is a limitation of this mapping strategy: 

Mapping

Book.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-mapping 
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<class name="com.candidjava.hibernate.Book" table="Book12"
		discriminator-value="book">

		<id name="id" type="int" column="id">
			<generator class="increment" />
		</id>
		<discriminator column="book_type" type="string" /> <!-- position of dis colum -->

		<property name="title" type="string" column="title" />
		<property name="author" type="string" column="author" />
		<property name="cost" type="double" column="cost" />


		<subclass name="com.candidjava.hibernate.SpecialEditionBook"
			discriminator-value="SpecialEditionBook">
			<property name="newfeatures" type="string" column="features" />
		</subclass>


		<subclass name="com.candidjava.hibernate.InternationalBook"
			discriminator-value="InternationalBook">
			<property name="languages" type="string" column="languages" />
			<property name="region" type="int" column="region" />
		</subclass>

	</class>
</hibernate-mapping>
Inserting record into Table per class
public void insertBook(Book bk) {
		try {
			Session s = getSession();
			Transaction transaction = s.beginTransaction();
			s.save(bk);
			transaction.commit();

		} catch (HibernateException e) {
			e.printStackTrace();
		}

	}
BookDao m=new BookDao();
		
		Book bk=new Book();
		bk.setAuthor("raman");
		bk.setCost(60);
		bk.setTitle("mysql");
		
		
		InternationalBook ib=new InternationalBook();
		ib.setAuthor("Candid");
		ib.setCost(70);
		ib.setTitle("mysql");
		ib.setLanguages("english");
		ib.setRegion(12);
		
		SpecialEditionBook sb=new SpecialEditionBook();
		sb.setAuthor("surendar");
		sb.setCost(90);
		sb.setTitle("j2ee");
		sb.setNewfeatures("angular");
		
		m.insertBook(bk);
		m.insertBook(ib);
		m.insertBook(sb);
Retrieving or getting record from Table per class
public Book getBook(int id) {
		Book sd = null;
		try {
			Session s = getSession();

			sd = (Book) s.get(Book.class, id);

		} catch (HibernateException e) {
			System.out.println(e.getMessage());
		}
		return sd;
	}
BookDao ms=new BookDao();
		
		Book b=ms.getBook(2);
		
		System.out.println(b.getAuthor());
		System.out.println(b.getTitle());
		System.out.println(b.getCost());
		
		if(b instanceof InternationalBook)
		{
			InternationalBook ib=(InternationalBook) b;
			System.out.println(ib.getLanguages());
			System.out.println(ib.getRegion());
		}
		if(b instanceof SpecialEditionBook)
		{
			SpecialEditionBook sb=(SpecialEditionBook) b;
			System.out.println(sb.getNewfeatures());
			
		}

POJO
Book.java
package com.candidjava.hibernate;

public class Book {
	int id;
	String title;
	String author;

	double cost;

	public Book() {
	}

	public Book(String title, String author, double cost) {
		this.title = title;
		this.author = author;

		this.cost = cost;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getId() {
		return id;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getTitle() {
		return title;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public String getAuthor() {
		return author;
	}

	public void setCost(double cost) {
		this.cost = cost;
	}

	public double getCost() {
		return cost;
	}
}

 International Book
InternatinalBook.java
package com.candidjava.hibernate;

public class InternationalBook extends Book {

	private String languages;
	private int region;

	public InternationalBook() {
	}

	public InternationalBook(String title, String author, double cost,
			String language, int region) {
		super(title, author, cost);

		languages = language;
		this.region = region;
	}

	public void setLanguages(String s) {
		languages = s;
	}

	public String getLanguages() {
		return languages;
	}

	public void setRegion(int i) {
		region = i;
	}

	public int getRegion() {
		return region;
	}
}
Special Edition Book
SpecialEditionBook.java
package com.candidjava.hibernate;

public class SpecialEditionBook extends Book {

	private String newfeatures;

	public SpecialEditionBook() {
	}

	public SpecialEditionBook(String title, String author, double cost,
			String features) {
		super(title, author, cost);

		newfeatures = features;
	}

	public void setNewfeatures(String s) {
		newfeatures = s;
	}

	public String getNewfeatures() {
		return newfeatures;
	}
}
Download
Table per class example zip
table per class example war   





Comments


©candidjava.com