<img alt="" src="https://secure.leadforensics.com/150446.png " style="display:none;">

Multiple Inheritance in Domain Model Design

Madhura Oak Nov 13, 2013

Domain Design Java JPA Technology

While using multiple inheritance in domain model design you need to be cautious as programming languages such as Java do not support it. Hence, for designing such a domain model, GoF structural design pattern – Bridge pattern can be used. There are two layers of abstraction used in Bridge pattern.

In my blog on Bridge pattern, I had written about how we had implemented it (see Figure 1).

UML class diagram – Bridge Pattern

Figure 1. UML class diagram – Bridge Pattern

In this blog, I’m writing about implementing this domain model using JPA 2.0. In Figure 1. OrderableItem is an interface. An object of type OrderableItem can either be an instance of Product or ProductSuite. For implementing the domain model of Figure 1. in JPA 2.0, we will have to use a collection of OrderableItem in Order entity. However, in JPA if we use property of type interface then we need to specify its implementing entity class using targetEntity attribute of @OneToOne, @OneToMany, @ManyToOne and @ManyToMany annotations (in the above case it is @OneToMany). Since the entity class of OrderableItem can vary in each order, it cannot be hardcoded using the targetEntity attribute. Thus, to implement this domain model, we will have to use OrderableItem as an abstract class as given in Figure 2. instead of an interface.

Using Bridge Pattern in JPA domain model

Figure 2. Using Bridge Pattern in JPA domain model

Single Table Inheritance strategy of JPA 2.0 can be used for OrderableItem and its subclasses whereas for Order and its subclasses, Joined Table Inheritance strategy can used.

Summary

While designing domain model, avoid using multiple inheritance directly in the design since some programming languages do not support multiple inheritance. GoF structural design pattern – Bridge pattern can be used instead in the domain model design. JPA 2.0 provides three inheritance strategies which can be used as appropriate to implement the two levels of abstraction in Bridge pattern.

 

Similar Blog

e-Zest is a leading digital innovation partner for enterprises and technology companies that utilizes emerging technologies for creating engaging customers experiences. Being a customer-focused and technology-driven company, it always helps clients in crafting holistic business value for their software development efforts. It offers software development and consulting services for cloud computing, enterprise mobility, big data and analytics, user experience and digital commerce.