Skip to content

Mapped SuperClass Support

chhavigangwal edited this page Oct 18, 2013 · 15 revisions

Introduction:

Mapped super class is used to define state and mapping information that is common to multiple entity classes.It is a super class which does not have any separate table.It is never be a part of persistent relationship and can be concrete or an abstract class. Kundera, being a JPA provider supports Mapped super class.

Why Support it ?

In order to become a stronger JPA provider Kundera has also enabled support of Mapped Superclasses and Inheritance strategy.

Mapped SuperClass as concrete class :

@MappedSuperclass
@Table(name = "TRNX")
public class Transaction 
{

    @Id
    private String txId;
    
    @Column
    private String bankIdentifier;

    
    @Column
    private Date transactionDt;

Inheritance Strategy:

@Entity
@Table(name = "TRNX")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "tx_type")
public class Transaction extends AbstractTransaction
{
    
    @Column
    private String bankIdentifier;

It can be implemented in two ways :

  • Discriminator column
  • Attribute Override

Sample Use Case : CreditTransaction :

@Entity
@Table(name = "TRNX_CREDIT")
@DiscriminatorValue(value = "CREDIT")
@AttributeOverride(name="bankIdentifier",column= @Column(name="CREDIT_BANK_IDENT"))
@IndexCollection(columns={@Index(name="bankIdentifier")})
public class CreditTransaction extends Transaction
{

    @Column
    private Integer amount;

    @Column
    @Enumerated(EnumType.STRING)
    private Status txStatus;

Debit Transaction :


@Entity
@DiscriminatorValue(value="DEBIT")

@AttributeOverrides(value = { @AttributeOverride(name = "txId", column = @Column(name = "DEBIT_ID")),
        @AttributeOverride(name = "bankIdentifier", column = @Column(name = "DEBIT_BANK_IDENT")),
        @AttributeOverride(name = "transactionDt", column = @Column(name = "TX_DT")) })

public class DebitTransaction extends Transaction
{

    @Column
    private Integer amount;

Entity Transaction :

        CreditTransaction creditTx = new CreditTransaction();
        creditTx.setTxId("credit1");
        creditTx.setTxStatus(Status.APPROVED);
        creditTx.setBankIdentifier("sbi");
        creditTx.setTransactionDt(new Date());
        creditTx.setAmount(10);
        em.persist(creditTx);

        waitThread(wait);

        DebitTransaction debitTx = new DebitTransaction();
        debitTx.setTxId("debit1");
        debitTx.setTxStatus(Status.PENDING);
        debitTx.setTransactionDt(new Date());
        debitTx.setBankIdentifier("sbi");
        debitTx.setAmount(-10);
        em.persist(debitTx);

Benefits :

  • Mapped Superclass and inheritance Strategy enable tradition normalized relational database schema support.

To-do :

  • No join table support enabled
Clone this wiki locally