package cyrille.hibernate; import java.io.Serializable; import java.sql.Connection; import javax.persistence.Basic; import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import org.apache.commons.lang.builder.ToStringBuilder; import org.hibernate.ejb.Ejb3Configuration; import org.hibernate.ejb.HibernateEntityManagerFactory; import org.hibernate.engine.SessionFactoryImplementor; import org.junit.Before; import org.junit.Test; public class ImmutableEntityJpaTest { @Entity() @org.hibernate.annotations.Entity(mutable = false) @Table(name="gender") public static class Gender implements Serializable { /** * JPA requires a public or protected no-arg constructor */ protected Gender() { this(null, null); } public Gender(Long id, String name) { super(); this.id = id; this.name = name; } private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private final Long id; @Basic private final String name; public String getName() { return name; } @Override public String toString() { return new ToStringBuilder(this).append("id", this.id).append("name", this.name).toString(); } } EntityManagerFactory entityManagerFactory; @Before public void setUp() throws Exception { Ejb3Configuration configuration = new HsqldbEjb3Configuration(); configuration.addAnnotatedClass(Gender.class); this.entityManagerFactory = configuration.buildEntityManagerFactory(); SessionFactoryImplementor sessionFactoryImplementor = (SessionFactoryImplementor)((HibernateEntityManagerFactory)this.entityManagerFactory).getSessionFactory(); Connection connection = sessionFactoryImplementor.getConnectionProvider().getConnection(); connection.createStatement().execute("insert into gender(id, name) values (1, 'MALE')"); connection.createStatement().execute("insert into gender(id, name) values (2, 'FEMALE')"); connection.commit(); } @Test public void test() throws Exception { EntityManager entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); Gender male = entityManager.getReference(Gender.class, 1L); Gender female = entityManager.getReference(Gender.class, 2L); System.out.println(male); System.out.println(female); entityManager.getTransaction().commit(); } }