2020-05-14

Hibernate JPA @DiscriminatorFormula Example

@DiscriminatorFormula

The @DiscriminatorFormula annotation is used to specify a Hibernate @Formula to resolve the inheritance discriminator value.

DiscriminatorFormula Used to apply a Hibernate formula (derived value) as the inheritance discriminator "column". Used in place of the JPA DiscriminatorColumn when a formula is wanted. To be placed on the root entity.

Single Table discriminator formula
@Entity(name = "Account")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula(
"case when debitKey is not null " +
"then 'Debit' " +
"else ( " +
"   case when creditKey is not null " +
"   then 'Credit' " +
"   else 'Unknown' " +
"   end ) " +
"end "
)
public static class Account {

@Id
private Long id;

private String owner;

private BigDecimal balance;

private BigDecimal interestRate;

//Getters and setters are omitted for brevity

}

@Entity(name = "DebitAccount")
@DiscriminatorValue(value = "Debit")
public static class DebitAccount extends Account {

private String debitKey;

private BigDecimal overdraftFee;

//Getters and setters are omitted for brevity

}

@Entity(name = "CreditAccount")
@DiscriminatorValue(value = "Credit")
public static class CreditAccount extends Account {

private String creditKey;

private BigDecimal creditLimit;

//Getters and setters are omitted for brevity

}

No comments:

Post a Comment