0
votes

in @inheritance type Joined

I have class person, employee and Student

i have common columns in Person , and getters setters for discriminator column if i have to access it from person class

@Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="PERSON_TYPE", discriminatorType=DiscriminatorType.STRING) public class Person

@Column(name = "RELATIONSHIP_TYPE",insertable=false,nullable=false,updatable=false) private String relationType;

// getters and setters

@DiscriminatorValue("STUDENT") @PrimaryKeyJoinColumn(name="PERSON_ID") public class Student

@DiscriminatorValue("EMPLOYEE") @PrimaryKeyJoinColumn(name="PERSON_ID") public class Employee

so when i am saving the Employee or Student record and then retrieving Person record, It is giving me discriminator column value as NULL but after restarting the server its giving me value accordingly

if i manually set the value of discriminator column value and then save and retrieve then its giving me the value (Do i need to manaully set the discriminator column value?) then what is benefit of using discriminator column

why should i not use OneToMany relation of person with employee and student having column Type and via enum i can enter the perspective value into the column and i will also apply lazy fetching on that columns

Please Suggest

Thanks In Advance Ramandeep Singh

1

1 Answers

0
votes

i have the same use case but did it a little bit different. I have an enum PersonType and a abstract property which is overridden in every extended class. Hibernate uses the discriminator to decide which class to create and the class decides which is the discriminator value both as mapping and as property.

pubilc abstract PersonType getType();