# How to specify multiple discriminator columns in a single table inheritance strategy (multilevel inheritance)

**URL:** <https://discourse.hibernate.org/t/how-to-specify-multiple-discriminator-columns-in-a-single-table-inheritance-strategy-multilevel-inheritance/5305>\
**Category:** Hibernate ORM\
**Created:** [April 29, 2021, 7:27am UTC](https://discourse.hibernate.org/t/how-to-specify-multiple-discriminator-columns-in-a-single-table-inheritance-strategy-multilevel-inheritance/5305 "2021-04-29T07:27:22Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![vaibhawj](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/vaibhawj/32/1611_2.png) [@vaibhawj](https://discourse.hibernate.org/u/vaibhawj)\
**Post date:** [April 29, 2021, 7:27am UTC](https://discourse.hibernate.org/t/how-to-specify-multiple-discriminator-columns-in-a-single-table-inheritance-strategy-multilevel-inheritance/5305/1 "2021-04-29T07:27:23Z")

</div>

Hi,  
I am just copying the original question from older forum - [Hibernate Community • View topic - Multiple discriminator columns](https://forum.hibernate.org/viewtopic.php?p=2449483)

Say my class hierarchy is the following, and I want to use table-per-hierarchy:

Cat  
–DomesticCat  
-----Persian  
-----Manx  
–WildCat  
-----Tiger  
-----Lion

What I’d like to do is create the table CAT with discriminator columns TYPE and SUB\_TYPE.

TYPE can have the values “DOMESTIC” and “WILD”.  
SUB\_TYPE can have the values “PERSIAN”, “MANX”, “LION” and “TIGER”.

Any suggestion how to deal with multi level inheritance situation?

---

<div class="post-metadata">

**Author:** ![beikov](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/beikov/32/258_2.png) [@beikov](https://discourse.hibernate.org/u/beikov)\
**Post date:** [April 29, 2021, 1:05pm UTC](https://discourse.hibernate.org/t/how-to-specify-multiple-discriminator-columns-in-a-single-table-inheritance-strategy-multilevel-inheritance/5305/2 "2021-04-29T13:05:07Z")

</div>

Is this a legacy table structure that you want to map or are you considering to model it this way? I would recommend you use a single table inheritance, make `Cat`, `DomesticCat` and `WildCat` abstract, and finally use a single discriminator column. Hibernate does not really support multiple discriminator columns per level.

---

<div class="post-metadata">

**Author:** ![vaibhawj](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/vaibhawj/32/1611_2.png) [@vaibhawj](https://discourse.hibernate.org/u/vaibhawj)\
**Post date:** [April 30, 2021, 4:30am UTC](https://discourse.hibernate.org/t/how-to-specify-multiple-discriminator-columns-in-a-single-table-inheritance-strategy-multilevel-inheritance/5305/3 "2021-04-30T04:30:22Z")

</div>

Thanks @beikov. You are right about discriminator columns.

I found a way using discriminator formula -  
`@DiscriminatorFormula("CONCAT(type, sub_type)")`

Then, I could put these on different entities in the hierarchy `@DiscriminatorValue("DomesticCat")` or `@DiscriminatorValue("DomesticCatPersian")`
