Retrieving Objects
On the database server side object retrieval results in a more
expensive operation: A query for root class instances
ofinherit.joined.v1.BillingDetails
❶ of our inheritance hierarchy
results in joining all three tables BillingDetails
❶, BankAccount
❷ and CreditCard
❸:
Java | package inherit.joined.v1;
...
public class RetrieveAll {
...
final Query searchBilling = session.createQuery("from inherit.tpc.v1.BillingDetails" ❶);
... |
Sql | Hibernate: select billingdet0_.id as id0_, billingdet0_.created as created0_, billingdet0_.number as number0_, billingdet0_1_.bankName as bankName1_, billingdet0_1_.swiftcode as swiftcode1_, billingdet0_2_.cardType as cardType2_, billingdet0_2_.expiration as expiration2_, case when billingdet0_1_.id is not null then 1 when billingdet0_2_.id is not null then 2 when billingdet0_.id is not null then 0 end as clazz_ from BillingDetails billingdet0_ ❶ left outer join BankAccount billingdet0_1_ ❷ on billingdet0_.id=billingdet0_1_.id left outer join CreditCard billingdet0_2_ ❸ on billingdet0_.id=billingdet0_2_.id |
No. 22
JPA constraints and database integrity.
Q: |
Explain all integrity constraints of the Hibernate generated schema. Will it implement the constraints corectly on database level corresponding to the inheritance related Java™ objects? On contrary: Are there possible database states which do not correspond to the domain model's object constraints? |
||||||||
A: |
We take a look to the database schema: CREATE TABLE BillingDetails ( id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY ❶, created datetime NOT NULL, number varchar(32) NOT NULL ); CREATE TABLE CreditCard ( id bigint(20) NOT NULL PRIMARY KEY ❷ REFERENCES ❸ BillingDetails, cardType int(11) NOT NULL, expiration datetime NOT NULL ); CREATE TABLE BankAccount ( id bigint(20) NOT NULL PRIMARY KEY ❹ REFERENCES ❺ BillingDetails, bankName varchar(255) NOT NULL, swiftcode varchar(255) NOT NULL );
The NOT NULL constraints implement their counterpart properties in the corresponding Java™ objects. The mapping does not cover one important integrity
constraint of our domain model: The base class
So the current database schema actually refers to a
domain model having a concrete base class
|
No. 23
Implementing figures by joined subclasses
Q: |
Implement the model being given in Figure 952, “Figure subclasses” by joined subclasses. |
A: |
See
|