---
title: Changing Entity Type In JPA
description: Changing Entity Type In JPA
---

[![e-Zest logo\_An accion lab company\_Colour](https://blog.e-zest.com/hubfs/images/Logos%20with%20Tagline/Corporate/SVG/e-Zest%20logo_An%20accion%20lab%20company_Colour.svg "e-Zest logo_An accion lab company_Colour")](https://www.e-zest.com/)

- [WORK](https://www.e-zest.com/our-work)
- [SERVICES](https://www.e-zest.com/our-services) 
    - [Product Engineering](https://www.e-zest.com/digital-product-engineering-services)
    - [Enterprise Data Services](https://www.e-zest.com/enterprise-data-services)
    - [Digital Commerce](https://www.e-zest.com/digital-commerce-services)
    - [Digital Operations](https://www.e-zest.com/digital-operations)
    - [Digital Consulting](https://www.e-zest.com/digital-transformation-consulting-services)
    - [Digital Experience Design](https://www.e-zest.com/digital-experience-design)
- [INSIGHTS](https://blog.e-zest.com/)
- [CAREERS](https://www.e-zest.com/careers)
- [ENTERPRISE DATA SERVICES](https://www.e-zest.com/enterprise-data-services)
- [GENERATIVE AI](https://www.e-zest.com/generative-ai)
- [Healthcare](https://healthcare.e-zest.com)
- [Contact Us](https://www.e-zest.com/contact-us)

- ![Elevating Product Engineering with AI and ML](https://blog.e-zest.com/hubfs/Elevating%20Product%20Engineering%20with%20AI%20and%20ML.jpg)

  [BLOGS](https://blog.e-zest.com)
  
  #### Elevating Product Engineering with AI and ML

  As technology evolves and customer choices broaden, there is an increasing ...

  [Read more](https://blog.e-zest.com/elevating-product-engineering-with-ai-and-ml)
- ![e-Zest – An Accion Labs Company gets Recognition as a Contender in the ISG Provider Lens™ Study on Digital Engineering Services 2024](https://blog.e-zest.com/hubfs/e-Zest%20%E2%80%93%20An%20Accion%20Labs%20Company%20-%20Gets%20Recognition%20as%20a%20Contender%20in%20the%20ISG%20Provider%20LensTM%20Study%20on%20Digital%20Engineering%20Services%202024.jpg)

  [NEWS](https://blog.e-zest.com/news)
  
  #### e-Zest – An Accion Labs Company gets Recognition as a Contender in the ISG Provider Lens™ Study on Digital Engineering Services 2024

  We are delighted to announce that e-Zest – An Accion Labs Company has been ...

  [Read more](https://blog.e-zest.com/news/e-zest-an-accion-labs-company-gets-recognition-as-a-contender-in-the-isg-provider-lens-study-on-digital-engineering-services-2024)
- ![e-Zest Solutions supports Digital Pune Mission](https://blog.e-zest.com/hubfs/blog-files/Digital%20Literacy%20Bus%20e-Zest.png)

  [CSR](https://blog.e-zest.com/csr)
  
  #### e-Zest Solutions supports Digital Pune Mission

  **Pune, India:** e-Zest Solutions, a leading digital technology innovation ...

  [Read more](https://blog.e-zest.com/csr/e-zest-solutions-supports-digital-pune-mission)

- [Work](https://www.e-zest.com/our-work)
- [Services](https://www.e-zest.com/our-services)
- [Insights](https://blog.e-zest.com)
- [Careers](https://www.e-zest.com/careers)
- [Enterprise Data](https://www.e-zest.com/enterprise-data-services)
- [Generative AI](https://www.e-zest.com/generative-ai)
- [Innovations](https://www.e-zest.com/innovations)
- [Healthcare](https://healthcare.e-zest.com)
- [About](https://www.e-zest.com/about-us)
- [Contact](https://www.e-zest.com/contact-us)

- [Blog](https://blog.e-zest.com/)
- [News](https://blog.e-zest.com/news)
- [CSR](https://blog.e-zest.com/csr)

- [![Linkedin Icon](https://blog.e-zest.com/hubfs/icons/linkedin_icon_white.svg)](https://www.linkedin.com/company/e-zest-solutions/)
- [![Twitter Icon](https://blog.e-zest.com/hubfs/twitter-logo-silhouette%20(5).svg)](https://twitter.com/ezest)
- [![Facebook Icon](https://blog.e-zest.com/hubfs/facebook-app-logo%20(4).svg)](https://www.facebook.com/61259256638)
- [![Instagram Icon](https://blog.e-zest.com/hubfs/instagram-logo%20(4).svg)](https://www.instagram.com/ezestsolutions/)
- [![Youtube Icon](https://blog.e-zest.com/hubfs/icons/youtube_icon_white.svg)](https://www.youtube.com/user/ezestcorporate)

[![Go to top icon](https://blog.e-zest.com/hubfs/AA%20Assets/top%20button.svg)](https://blog.e-zest.com/changing-entity-type-in-jpa/#top)

Hit enter to search or ESC to close

Insights

e-Zest members share technology ideas to foster digital transformation.

- [Blog](https://blog.e-zest.com)
- [News](https://blog.e-zest.com/news)
- [Podcasts](https://www.e-zest.com/podcasts)
- [Healthcare](https://blog.e-zest.com/healthcare)
- [CSR](https://blog.e-zest.com/csr)
- [Whitepaper](https://blog.e-zest.com/whitepaper)
- [Playbook](https://blog.e-zest.com/playbook)
- [Media Kit](https://www.e-zest.com/media-kit)

# Changing Entity Type In JPA

[Madhura Oak](https://blog.e-zest.com/author/madhura-oak)  Nov 27, 2012

[inheritance](https://blog.e-zest.com/topic/inheritance) [change entity type](https://blog.e-zest.com/topic/change-entity-type) [change entity class](https://blog.e-zest.com/topic/change-entity-class) [JPA](https://blog.e-zest.com/topic/jpa) [Technology](https://blog.e-zest.com/topic/technology)

- <https://www.linkedin.com/shareArticle?mini=true&url=https://blog.e-zest.com/changing-entity-type-in-jpa/&title=&summary=&source=>
- <https://twitter.com/intent/tweet?source=https://blog.e-zest.com/changing-entity-type-in-jpa/&text=Changing%20Entity%20Type%20In%20JPA>
- <https://www.facebook.com/sharer/sharer.php?u=https://blog.e-zest.com/changing-entity-type-in-jpa/>
- <https://www.instagram.com/ezestsolutions/?u=https://blog.e-zest.com/changing-entity-type-in-jpa/>

While using entities in an inheritance hierarchy, you may sometimes need to change the entity from superclass type to subclass type or from one subclass type to another.

For example, a Customer entity needs to be changed to its subclass `PrivilegedCustomer` or a `PartTimeEmployee` entity needs to be changed to `FullTimeEmployee` where both `PartTimeEmployee` and `FullTimeEmployee` are subclasses of class Employee.

In Java, we cannot change the object type from one class to another. Similarly, there is no way to change the entity from one class type to another in Java Persistence API (JPA). In order to change the entity to another class type in JPA, you will have to remove the existing entity, create a new entity of the required type, copy state of existing entity to the new one and persist the new entity. This approach has a drawback when auto-generated `@Id` is used. While creating entity of another class type, we cannot use the same id of the existing entity for the new one. One way to resolve this problem is not to use `@GeneratedValue` annotation along with `@Id`, instead another class can generate the id value and assign it to the entity.

We may not need to use the same id while converting an entity from one subclass type to another. However, we might have to maintain the same id when we convert entity to the subclass type.

Another approach to modify the entity class type is to execute the native SQL queries. In single table inheritance strategy, an update SQL query to update the discriminator column can be executed to modify the entity type. In joined table and table per class inheritance strategies, insert-update-delete SQL queries may need to be executed to change the entity type. This approach is not recommend as we lose the benefits the JPA. Also, the native query won’t update the state of managed entities.

The native queries are always executed in a separate transaction. Versioning needs to be implemented on the entities which are modified by native queries as the managed and detached entities may become outdated.

Using native query to change the entity type is the optimum solution when the following conditions are true:

- Single table inheritance strategy is used
- You want to change the entity from superclass to subclass type
- Versioning is taken care in the entity
- Entity uses auto-generated Id and you want the same Id to be used after changing the entity type (optional)

The Listing 1 shows two classes - `Customer` and `PrivilegedCustomer` – using SINGLE\_TABLE inheritance strategy.

```

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name= “type”,
    discriminatorType=DiscriminatorType.INTEGER)
@DiscriminatorValue(“0”)
public class Customer {
    @Id @GeneratedValue private Long customerId;
    @Version private int version;
    ...
}

@Entity
@DiscriminatorValue(“1”)
public class PrivilegedCustomer extends Customer {
    ...
}
```

Listing 1.Two classes using SINGLE\_TABLE inheritance strategy

When you want to modify a customer record from `Customer` to `PrivilegedCustomer` type, the best way to do it is to execute a native SQL UPDATE query to modify the discriminator value. The query can be executed dynamically using `EntityManager` as shown in Listing 2 or it can be declared by using `@NamedNativeQuery` annotation and executed as shown in Listing 3.

The native SQL queries should always be executed in a new transaction. Hence the transaction attribute REQUIRES\_NEW is used.

```

@PersistenceContext EntityManager em;
...
em.createNativeQuery(“UPDATE CUSTOMER SET TYPE = ?, ”
    “ VERSION = VERSION + 1 WHERE CUSTOMERID = ?”)
    .setParameter(1, 1)
    .setParameter(2,customerId)
    .executeUpdate();
```

Listing 2. Executing native SQL query dynamically to modify the entity to PrivilegedCustomer type

```

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name= “type”,
    discriminatorType=DiscriminatorType.INTEGER)
@DiscriminatorValue(“0”)
@NamedNativeQuery(name=“Customer.changeCustomerType”,
    query=“UPDATE CUSTOMER SET TYPE = ?, ” +
        “VERSION = VERSION + 1 WHERE CUSTOMERID = ?”)
public class Customer {
    @Id private Long customerId;
    ...
}

@Stateless
public class Admin {
    @PersistenceContext EntityManager em;

    @TransactionAttribute(
        TransactionAttributeType.REQUIRES_NEW)
    public void changeCustomerTypeToPrivileged(
            long customerId) {
	em.createNamedQuery(“Customer.changeCustomerType”)
	    .setParameter(1,1).setParameter(1,customerId)
	    .executeUpdate();
    }
}
```

Listing 3. Executing native SQL query defined using `@NamedNativeQuery`

**Versioning & Locking**

When a customer type is changed to PrivilegedCustomer, to avoid changing the type back to Customer by managed or detached entities, versioning and locking should be used. The native SQL query should explicitly increment the version.

- <https://twitter.com/intent/tweet?source=https://blog.e-zest.com/changing-entity-type-in-jpa/&text=Changing%20Entity%20Type%20In%20JPA>
- <https://www.facebook.com/sharer/sharer.php?u=https://blog.e-zest.com/changing-entity-type-in-jpa/>
- <https://www.linkedin.com/shareArticle?mini=true&url=https://blog.e-zest.com/changing-entity-type-in-jpa/&title=&summary=&source=>

### Similar Blog

[Oracle NoSQL Database (ONDB) Relational databases have been around us for more than 20 years now. Needless to say, they are mature and an obvious choice for ... By Madhura Oak Dec 24, 2013](https://blog.e-zest.com/oracle-nosql-database-ondb/)

[Session State Isolation Techniques Isolation of data in a session is the trickiest part of session management. A session may constitute of multiple requests. ... By Madhura Oak Dec 02, 2013](https://blog.e-zest.com/session-state-isolation-techniques/)

[Session Management There are three ways of session management in n-tier applications: By Madhura Oak Nov 27, 2013](https://blog.e-zest.com/session-management/)

[Transaction and Query timeout Performance is one of the non-functional requirements of an application. It defines the acceptable maximum response time for ... By Madhura Oak Nov 25, 2013](https://blog.e-zest.com/transaction-and-query-timeout/)

[![Multiple Inheritance in Domain Model Design](https://blog.e-zest.com/hs-fs/file-3586010320-png/blog-files/uml-class-diagram-%E2%80%93-bridge-pattern.png) Multiple Inheritance in Domain Model Design While using multiple inheritance in domain model design you need to be cautious as programming languages such as Java do not ... By Madhura Oak Nov 13, 2013](https://blog.e-zest.com/multiple-inheritance-in-domain-model-design/)

## Helping Organizations Thrive in the Digital Age

[Contact Us](https://www.e-zest.com/contact-us)

- [About](https://www.e-zest.com/about-us)
- [Services](https://www.e-zest.com/our-services)
- [Work](https://www.e-zest.com/our-work)
- [Insights](https://blog.e-zest.com/)
- [Healthcare](https://healthcare.e-zest.com/)
- [Accion Labs](https://www.accionlabs.com/)

- <https://www.linkedin.com/company/e-zest-solutions/>
- <https://twitter.com/ezest>
- <https://www.facebook.com/eZest/>
- <https://www.instagram.com/ezestsolutions/>
- <https://www.youtube.com/user/ezestcorporate>

- Dallas
- Detroit
- Hannover
- Vienna
- London
- Pune

 © 2025 e-Zest Solutions

- [Privacy Policy](https://www.e-zest.com/privacypolicy)
- [Cookie Policy](https://www.e-zest.com/cookie-policy)

 Contact us

 Contact us

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.