100% found this document useful (2 votes)
5K views25 pages

Advanced Hibernate

This document discusses advanced Hibernate concepts including custom types and inheritance models. It describes how to create custom types using the UserType interface to map properties to non-default database types. It also outlines the three strategies for mapping class inheritance hierarchies in Hibernate - table per class, table per subclass, and table per concrete class - and provides examples of how each would be implemented.

Uploaded by

Uday Kumar
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
5K views25 pages

Advanced Hibernate

This document discusses advanced Hibernate concepts including custom types and inheritance models. It describes how to create custom types using the UserType interface to map properties to non-default database types. It also outlines the three strategies for mapping class inheritance hierarchies in Hibernate - table per class, table per subclass, and table per concrete class - and provides examples of how each would be implemented.

Uploaded by

Uday Kumar
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 25

Advanced Hibernate

Mike Calvo
Citronella Software
Topics
• Custom Types
• Inheritance Models
Custom Types
• Sometimes you don’t want the default
mapping Hibernate associates with your
property
• Reasons
– Combine two fields into one column
– Numbers and dates stored as strings
– Data encryption
Creating a UserType
• Implement the org.hibernate.usertype.UserType interface
• returnedClass()
– Tells Hibernate what type of value to expect for your Type
• sqlTypes()
– Tells Hibernate what JDBC types you are mapping to
• Key conversion methods
– nullSafeGet
– nullSafeSet
– Have access to
• JDBC resultSet
• Column names for property
• Owning object
Example UserType
• DateAsStringUserType converts dates to
Strings formatted as yyyy-MM-dd
Other UserType Methods
• equals and hashcode
– Make sure you check for nulls
• isMutable
– Are objects of the returned type mutable (Strings are
not)
• assemble and disassemble
– Prepare for/extract from caching
– Strings can be cached as is (simply return)
• replace
– Handles a merge
– Return the first parameter on immutable items
Using The UserType
• Annotate the property with the @Type
• Specify the fully qualified classname for
your UserType implementation in the type
attribute
Inheritance Models
• There are times when your Hibernate-
mapped classes participate in inheritance
relationships
– Patient extends Person
– Physician extends Person
• Hibernate provides three strategies for
simulating inheritance in the relational
database mapping
Hibernate Inheritance Strategies
• Table per class hierarchy
• Table per subclass
• Table per concrete class
Table per Class Hierarchy
• All of the data representing the properties
of every class in the Hierarchy are stored
in one table
• Requires that fields in subclasses be
nullable
• Uses discriminator column to determine
the type of object represented a row
– Each subclass must declare the discriminator
value for the type
Table per Class Hierarchy Example
• Patient and Physician extend Person
Patient and Person
Resultant DDL

Has fields for both Patient and Physician


Table per Subclass
• Each subclass in the hierarchy gets its
own table
• Parent class fields are in one table
• Primary key in subclass tables refer back
to the parent class table
• Use joined-subclass configuration
Table per Subclass Example
• CreditCardPayment, CashPayment, and
CheckPayment all extend Payment
Payment Subclasses
Table Per Subclass DDL
Discriminator w/Table Per Subclass
• Table per subclass also supports the use
of a discriminator
• Not required
Table per Concrete Class
• Each class in the hierarchy gets its own
table
• The parent class fields are duplicated in
each table
• Two approaches
– Union subclass
– Implicit polymorphism
Union Subclass
• Map the Parent class as normal
– No discriminator required
– Specify parent class properties
– @Inheritance(strategy =
InheritanceType.TABLE_PER_CLASS)
• Map each of the subclasses
– Specify a table name
– Specify subclass properties
Implicit Polymorphism
• Parent class is not mapped using
hibernate
– Annotate with @MappedSuperclass
• Each of the subclasses is mapped as a
normal class
– Map all of the properties, including the parent
properties
Implicit Polymorphism Example
• Car and Truck extend Vehicle
• SUV extends Truck
Vehicle Parent Class
• Class not mapped, but properties are
Vehicle Subclasses
Implicit Polymorphism DDL

You might also like