Hibernate Table per class hierarchy:
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