<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Apache TomEE</title>
	<meta name="description"
		  content="Apache TomEE is a lightweight, yet powerful, JavaEE Application server with feature rich tooling." />
	<meta name="keywords" content="tomee,asf,apache,javaee,jee,shade,embedded,test,junit,applicationcomposer,maven,arquillian" />
	<meta name="author" content="Luka Cvetinovic for Codrops" />
	<link rel="icon" href="../../favicon.ico">
	<link rel="icon"  type="image/png" href="../../favicon.png">
	<meta name="msapplication-TileColor" content="#80287a">
	<meta name="theme-color" content="#80287a">
	<link rel="stylesheet" type="text/css" href="../../css/normalize.css">
	<link rel="stylesheet" type="text/css" href="../../css/bootstrap.css">
	<link rel="stylesheet" type="text/css" href="../../css/owl.css">
	<link rel="stylesheet" type="text/css" href="../../css/animate.css">
	<link rel="stylesheet" type="text/css" href="../../fonts/font-awesome-4.1.0/css/font-awesome.min.css">
	<link rel="stylesheet" type="text/css" href="../../fonts/eleganticons/et-icons.css">
	<link rel="stylesheet" type="text/css" href="../../css/jqtree.css">
	<link rel="stylesheet" type="text/css" href="../../css/idea.css">
	<link rel="stylesheet" type="text/css" href="../../css/cardio.css">

	<script type="text/javascript">
		<!-- Matomo -->
		var _paq = window._paq = window._paq || [];
		/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
		/* We explicitly disable cookie tracking to avoid privacy issues */
		_paq.push(['disableCookies']);
		_paq.push(['trackPageView']);
		_paq.push(['enableLinkTracking']);
		(function () {
			var u = "//matomo.privacy.apache.org/";
			_paq.push(['setTrackerUrl', u + 'matomo.php']);
			_paq.push(['setSiteId', '5']);
			var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
			g.async = true;
			g.src = u + 'matomo.js';
			s.parentNode.insertBefore(g, s);
		})();
		<!-- End Matomo Code -->
    </script>
</head>

<body>
    <div class="preloader">
		<img src="../../img/loader.gif" alt="Preloader image">
	</div>
	    <nav class="navbar">
		<div class="container">
		  <div class="row">          <div class="col-md-12">

			<!-- Brand and toggle get grouped for better mobile display -->
			<div class="navbar-header">
				<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
					<span class="sr-only">Toggle navigation</span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
				</button>
				<a class="navbar-brand" href="/" title="Apache TomEE">
				    <span>

				    
                        <img 
							src="../../img/apache_tomee-logo.svg"
							onerror="this.src='../../img/apache_tomee-logo.jpg'"
							height="50"
							>
                    

                    </span>
                </a>
			</div>
			<!-- Collect the nav links, forms, and other content for toggling -->
			<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
				<ul class="nav navbar-nav navbar-right main-nav">
					<li><a href="../../docs.html">Documentation</a></li>
					<li><a href="../../community/index.html">Community</a></li>
					<li><a href="../../security/security.html">Security</a></li>
					<li><a class="btn btn-accent accent-orange no-shadow" href="../../download.html">Downloads</a></li>
				</ul>
			</div>
			<!-- /.navbar-collapse -->
		   </div></div>
		</div>
		<!-- /.container-fluid -->
	</nav>


    <div id="main-block" class="container main-block">
        <div class="row title">
          <div class="col-md-12">
            <div class='page-header'>
              
              <h1>JPA and Enums via @Enumerated</h1>
            </div>
          </div>
        </div>
        <div class="row">
            
            <div class="col-md-12">
                <p>It can sometimes be desirable to have a Java <code>enum</code> type to represent a particular column in a database. JPA supports converting database data to and from Java <code>enum</code> types via the <code>@javax.persistence.Enumerated</code> annotation.</p>
<p>This example will show basic <code>@Enumerated</code> usage in a field of an <code>@Entity</code> as well as <code>enum</code>s as the parameter of a <code>Query</code>. We'll also see that the actual database representation can be effectively <code>String</code> or <code>int</code>.</p>
<h2>Enum</h2>
<p>For our example we will leverage the familiar <code>Movie</code> entity and add a new field to represent the MPAA.org rating of the movie. This is defined via a simple <code>enum</code> that requires no JPA specific annotations.</p>
<pre><code>public enum Rating {
    UNRATED,
    G,
    PG,
    PG13,
    R,
    NC17
}
</code></pre>
<h2>@Enumerated</h2>
<p>In our <code>Movie</code> entity, we add a <code>rating</code> field of the enum type <code>Rating</code> and annotate it with <code>@Enumerated(EnumType.STRING)</code> to declare that its value should be converted from what is effectively a <code>String</code> in the database to the <code>Rating</code> type.</p>
<pre><code>@Entity
public class Movie {

    @Id
    @GeneratedValue
    private int id;
    private String director;
    private String title;
    private int year;

    @Enumerated(EnumType.STRING)
    private Rating rating;

    public Movie() {
    }

    public Movie(String director, String title, int year, Rating rating) {
        this.director = director;
        this.title = title;
        this.year = year;
        this.rating = rating;
    }

    public String getDirector() {
        return director;
    }

    public void setDirector(String director) {
        this.director = director;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public Rating getRating() {
        return rating;
    }

    public void setRating(Rating rating) {
        this.rating = rating;
    }
}
</code></pre>
<p>The above is enough and we are effectively done. For the sake of completeness we'll show a sample <code>Query</code></p>
<h2>Enum in JPQL Query</h2>
<p>Note the <code>findByRating</code> method which creates a <code>Query</code> with a <code>rating</code> named parameter. The key thing to notice is that the <code>rating</code> enum instance itself is passed into the<br/> <code>query.setParameter</code> method, <strong>not</strong> <code>rating.name()</code> or <code>rating.ordinal()</code>.</p>
<p>Regardless if you use <code>EnumType.STRING</code> or <code>EnumType.ORDINAL</code>, you still always pass the enum itself in calls to <code>query.setParameter</code>.</p>
<pre><code>@Stateful
public class Movies {

    @PersistenceContext(unitName = &quot;movie-unit&quot;, type = PersistenceContextType.EXTENDED)
    private EntityManager entityManager;

    public void addMovie(Movie movie) {
        entityManager.persist(movie);
    }

    public void deleteMovie(Movie movie) {
        entityManager.remove(movie);
    }

    public List&lt;Movie&gt; findByRating(Rating rating) {
        final Query query = entityManager.createQuery(&quot;SELECT m FROM Movie as m WHERE m.rating = :rating&quot;);
        query.setParameter(&quot;rating&quot;, rating);
        return query.getResultList();
    }

    public List&lt;Movie&gt; getMovies() throws Exception {
        Query query = entityManager.createQuery(&quot;SELECT m from Movie as m&quot;);
        return query.getResultList();
    }

}
</code></pre>
<h2>EnumType.STRING vs EnumType.ORDINAL</h2>
<p>It is a matter of style how you would like your <code>enum</code> data represented in the database. Either <code>name()</code> or <code>ordinal()</code> are supported:</p>
<ul>
  <li><code>@Enumerated(EnumType.STRING) Rating rating</code> the value of <code>rating.name()</code> is written and read from the corresponding database column; e.g. <code>G</code>, <code>PG</code>, <code>PG13</code></li>
  <li><code>@Enumerated(EnumType.ORDINAL) Rating rating</code> the value of <code>rating.ordinal()</code> is written and read from the corresponding database column; e.g. <code>0</code>, <code>1</code>, <code>2</code></li>
</ul>
<p>The default is <code>EnumType.ORDINAL</code></p>
<p>There are advantages and disadvantages to each.</p>
<h3>Disadvantage of EnumType.ORDINAL</h3>
<p>A disadvantage of <code>EnumType.ORDINAL</code> is the effect of time and the desire to keep <code>enums</code> in a logical order. With <code>EnumType.ORDINAL</code> any new enum elements must be added to the<br/><strong>end</strong> of the list or you will accidentally change the meaning of all your records.</p>
<p>Let's use our <code>Rating</code> enum and see how it would have had to evolve over time to keep up with changes in the MPAA.org ratings system.</p>
<p><strong>1980</strong></p>
<pre><code>public enum Rating {
    G,
    PG,
    R,
    UNRATED
}
</code></pre>
<p><strong>1984</strong> PG-13 is added</p>
<pre><code>public enum Rating {
    G,
    PG,
    R,
    UNRATED,
    PG13
}
</code></pre>
<p><strong>1990</strong> NC-17 is added</p>
<pre><code>public enum Rating {
    G,
    PG,
    R,
    UNRATED,
    PG13,
    NC17
}
</code></pre>
<p>If <code>EnumType.STRING</code> was used, then the enum could be reordered at anytime and would instead look as we have defined it originally with ratings starting at <code>G</code> and increasing in severity to <code>NC17</code> and eventually <code>UNRATED</code>. With <code>EnumType.ORDINAL</code> the logical ordering would not have withstood the test of time as new values were added.</p>
<p>If the order of the enum values is significant to your code, avoid <code>EnumType.ORDINAL</code></p>
<h2>Unit Testing the JPA @Enumerated</h2>
<pre><code>public class MoviesTest extends TestCase {

    public void test() throws Exception {

        final Properties p = new Properties();
        p.put(&quot;movieDatabase&quot;, &quot;new://Resource?type=DataSource&quot;);
        p.put(&quot;movieDatabase.JdbcDriver&quot;, &quot;org.hsqldb.jdbcDriver&quot;);
        p.put(&quot;movieDatabase.JdbcUrl&quot;, &quot;jdbc:hsqldb:mem:moviedb&quot;);

        EJBContainer container = EJBContainer.createEJBContainer(p);
        final Context context = container.getContext();

        final Movies movies = (Movies) context.lookup(&quot;java:global/jpa-scratch/Movies&quot;);

        movies.addMovie(new Movie(&quot;James Frawley&quot;, &quot;The Muppet Movie&quot;, 1979, Rating.G));
        movies.addMovie(new Movie(&quot;Jim Henson&quot;, &quot;The Great Muppet Caper&quot;, 1981, Rating.G));
        movies.addMovie(new Movie(&quot;Frank Oz&quot;, &quot;The Muppets Take Manhattan&quot;, 1984, Rating.G));
        movies.addMovie(new Movie(&quot;James Bobin&quot;, &quot;The Muppets&quot;, 2011, Rating.PG));

        assertEquals(&quot;List.size()&quot;, 4, movies.getMovies().size());

        assertEquals(&quot;List.size()&quot;, 3, movies.findByRating(Rating.G).size());

        assertEquals(&quot;List.size()&quot;, 1, movies.findByRating(Rating.PG).size());

        assertEquals(&quot;List.size()&quot;, 0, movies.findByRating(Rating.R).size());

        container.close();
    }
}
</code></pre>
<h1>Running</h1>
<p>To run the example via maven:</p>
<pre><code>cd jpa-enumerated
mvn clean install
</code></pre>
<p>Which will generate output similar to the following:</p>
<pre><code>-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.superbiz.jpa.enums.MoviesTest
Apache OpenEJB 4.0.0-beta-2    build: 20120115-08:26
http://tomee.apache.org/
INFO - openejb.home = /Users/dblevins/openejb/examples/jpa-enumerated
INFO - openejb.base = /Users/dblevins/openejb/examples/jpa-enumerated
INFO - Using &#39;javax.ejb.embeddable.EJBContainer=true&#39;
INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)
INFO - Found EjbModule in classpath: /Users/dblevins/openejb/examples/jpa-enumerated/target/classes
INFO - Beginning load: /Users/dblevins/openejb/examples/jpa-enumerated/target/classes
INFO - Configuring enterprise application: /Users/dblevins/openejb/examples/jpa-enumerated
INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)
INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)
INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
INFO - Auto-creating a container for bean org.superbiz.jpa.enums.MoviesTest: Container(type=MANAGED, id=Default Managed Container)
INFO - Configuring PersistenceUnit(name=movie-unit)
INFO - Auto-creating a Resource with id &#39;movieDatabaseNonJta&#39; of type &#39;DataSource for &#39;movie-unit&#39;.
INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase)
INFO - Adjusting PersistenceUnit movie-unit &lt;non-jta-data-source&gt; to Resource ID &#39;movieDatabaseNonJta&#39; from &#39;movieDatabaseUnmanaged&#39;
INFO - Enterprise application &quot;/Users/dblevins/openejb/examples/jpa-enumerated&quot; loaded.
INFO - Assembling app: /Users/dblevins/openejb/examples/jpa-enumerated
INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 406ms
INFO - Jndi(name=&quot;java:global/jpa-enumerated/Movies!org.superbiz.jpa.enums.Movies&quot;)
INFO - Jndi(name=&quot;java:global/jpa-enumerated/Movies&quot;)
INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)
INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)
INFO - Deployed Application(path=/Users/dblevins/openejb/examples/jpa-enumerated)
INFO - Undeploying app: /Users/dblevins/openejb/examples/jpa-enumerated
INFO - Closing DataSource: movieDatabase
INFO - Closing DataSource: movieDatabaseNonJta
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.831 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
</code></pre>
            </div>
            
        </div>
    </div>
<div style="margin-bottom: 30px;"></div>
<footer>
		<div class="container">
			<div class="row">
				<div class="col-sm-6 text-center-mobile">
					<h3 class="white">Be simple.  Be certified. Be Tomcat.</h3>
					<h5 class="light regular light-white">"A good application in a good server"</h5>
					<ul class="social-footer">
						<li><a href="https://www.facebook.com/ApacheTomEE/"><i class="fa fa-facebook"></i></a></li>
						<li><a href="https://twitter.com/apachetomee"><i class="fa fa-twitter"></i></a></li>
					</ul>
					<h5 class="light regular light-white">
						<a href="../../privacy-policy.html" class="white">Privacy Policy</a>
					</h5>
				</div>
				<div class="col-sm-6 text-center-mobile">
					<div class="row opening-hours">
						<div class="col-sm-3 text-center-mobile">
							<h5><a href="../../latest/docs/" class="white">Documentation</a></h5>
							<ul class="list-unstyled">
								<li><a href="../../latest/docs/admin/configuration/index.html" class="regular light-white">How to configure</a></li>
								<li><a href="../../latest/docs/admin/file-layout.html" class="regular light-white">Dir. Structure</a></li>
								<li><a href="../../latest/docs/developer/testing/index.html" class="regular light-white">Testing</a></li>
								<li><a href="../../latest/docs/admin/cluster/index.html" class="regular light-white">Clustering</a></li>
							</ul>
						</div>
						<div class="col-sm-3 text-center-mobile">
							<h5><a href="../../latest/examples/" class="white">Examples</a></h5>
							<ul class="list-unstyled">
								<li><a href="../../latest/examples/simple-cdi-interceptor.html" class="regular light-white">CDI Interceptor</a></li>
								<li><a href="../../latest/examples/rest-cdi.html" class="regular light-white">REST with CDI</a></li>
								<li><a href="../../latest/examples/ejb-examples.html" class="regular light-white">EJB</a></li>
								<li><a href="../../latest/examples/jsf-managedBean-and-ejb.html" class="regular light-white">JSF</a></li>
							</ul>
						</div>
						<div class="col-sm-3 text-center-mobile">
							<h5><a href="../../community/index.html" class="white">Community</a></h5>
							<ul class="list-unstyled">
								<li><a href="../../community/contributors.html" class="regular light-white">Contributors</a></li>
								<li><a href="../../community/social.html" class="regular light-white">Social</a></li>
								<li><a href="../../community/sources.html" class="regular light-white">Sources</a></li>
							</ul>
						</div>
						<div class="col-sm-3 text-center-mobile">
							<h5><a href="../../security/index.html" class="white">Security</a></h5>
							<ul class="list-unstyled">
								<li><a href="https://apache.org/security" target="_blank" class="regular light-white">Apache Security</a></li>
								<li><a href="https://apache.org/security/projects.html" target="_blank" class="regular light-white">Security Projects</a></li>
								<li><a href="https://cve.mitre.org" target="_blank" class="regular light-white">CVE</a></li>
							</ul>
						</div>
					</div>
				</div>
			</div>
			<div class="row bottom-footer text-center-mobile">
				<div class="col-sm-12 light-white">
					<p>Copyright &copy; 1999-2022 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
				</div>
			</div>
		</div>
	</footer>
	<!-- Holder for mobile navigation -->
	<div class="mobile-nav">
        <ul>
          <li><a hef="../../latest/docs/admin/index.html">Administrators</a>
          <li><a hef="../../latest/docs/developer/index.html">Developers</a>
          <li><a hef="../../latest/docs/advanced/index.html">Advanced</a>
          <li><a hef="../../community/index.html">Community</a>
        </ul>
		<a href="#" class="close-link"><i class="arrow_up"></i></a>
	</div>
	<!-- Scripts -->
	<script src="../../js/jquery-1.11.1.min.js"></script>
	<script src="../../js/owl.carousel.min.js"></script>
	<script src="../../js/bootstrap.min.js"></script>
	<script src="../../js/wow.min.js"></script>
	<script src="../../js/typewriter.js"></script>
	<script src="../../js/jquery.onepagenav.js"></script>
	<script src="../../js/tree.jquery.js"></script>
	<script src="../../js/highlight.pack.js"></script>
    <script src="../../js/main.js"></script>
		</body>

</html>

