hibernate inheritance for an online library/shop design implementation choice

258 Views Asked by At

I wish to implement an online library in hibernate. Here is my sql sschema:

sql schema

Between Book and Programming book I am thinking of using hibernate inheritance of type table per subclass joined. I designed the sql schema this way because I don't see the point of having the same columns duplicate in 10 tables. Maybe I need to add one more common column, I don't want to do it in 10 tables. But this means that whenever a Book is needed somewhere, a huge join would be made between all the subtables ( I have only 2, but I could have 50 book types!!! ). The same stuff applies if for example I would have had an online shop: I would have had Product, Tv, Laptop, Phone, etc...).

What design can help me avoid this behaviour?

My thoughts are:

  • I could duplicate all the columns in all the subtables, and thus, don't use inheritance at all, treat them like different entities. The only thing here is that I will have to tie every specific book table of other tables ( authors, etc )
  • I could avoid using inheritance, keep the current sql schema but use unidirectional association ( a ProgrammingBook has a Book, etc )

What option do you guys recommend?

Kind regards,

1

There are 1 best solutions below

2
On

From experience, when using inheritance with Hibernate, you should prefer the Table per Hierarchy point of view, with a discriminator.

Here's a thread that could help you pick an answer : How can you represent inheritance in a database?