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>
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);
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());
}
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; } }
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; } }
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; } }