Hibernate Table per concrete class using implicit polymorphism tutorial with example xml based


Three tables are required. There will not be any relationship between these tables. Dis-Advantage of this would be, tough to write join queries between them.
Mapping
Book.hbm
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-mapping 
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping> 
    <class name="com.candidjava.hibernate.Book" table="book" > 
        <id name="id" type="integer" unsaved-value="0">
            <generator  class="increment"/>
        </id>
        <property name="title" type="string" column="title"/>
        <property name="author" type="string" column="author"/>
        <property name="cost" type="double" column="cost"/> 
    </class>
    
    <class  name="com.candidjava.hibernate.SpecialEditionBook" table="sbook">
        <id name="id" type="integer" unsaved-value="0">
            <generator  class="increment"/>
        </id>
        <property name="title" type="string" column="title"/>
        <property name="author" type="string" column="author"/>
        <property name="cost" type="double" column="cost"/> 
     	<property name="newfeatures" type="string" column="features"/>
    </class>
    
    <class  name="com.candidjava.hibernate.InternationalBook" table="ibook">
        <id name="id" type="integer" unsaved-value="0">
            <generator  class="increment"/>
        </id>
        <property name="title" type="string" column="title"/>
        <property name="author" type="string" column="author"/>
        <property name="cost" type="double" column="cost"/> 
        
		<property name="languages" type="string" column="languages"/>
        <property name="region" type="int" column="region"/>
    </class> 
</hibernate-mapping>
Inserting record into Table per concrete 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 concrete 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
InternationalBook.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 Table per concrete class war
table per Table per concrete class zip




Comments


©candidjava.com