public void testColumnUpdatableAndInsertable() { EntityManager em = createEntityManager(); try { // Create an official beginTransaction(em); Official initialOfficial = new Official(); initialOfficial.setName("Gui Pelletier"); // insertable=true, updatable=false initialOfficial.setAge(25); // insertable=false, updatable=true initialOfficial.setSalary(50000); // insertable=true, updatable=false initialOfficial.setBonus(10000); // insertable=false, updatable=true ServiceTime service = new ServiceTime(); service.setStartDate("Jan 1, 2008"); // insertable=true, updatable=false service.setEndDate("Jul 1, 2010"); // insertable=false, updatable=true initialOfficial.setServiceTime(service); em.persist(initialOfficial); commitTransaction(em); // Close the EM, clear cache and get new EM. closeEntityManager(em); clearCache(); em = createEntityManager(); // Read the official and verify its content beginTransaction(em); Official official = em.find(Official.class, initialOfficial.getId()); assertTrue("The name was not inserted", official.getName().equals("Gui Pelletier")); assertTrue("The age was inserted", official.getAge() == null); assertTrue("The salary was not inserted", official.getSalary() == 50000); assertTrue("The bonus was inserted", official.getBonus() == null); assertTrue( "The embeddable start date was not inserted", official.getServiceTime().getStartDate().equals("Jan 1, 2008")); assertTrue( "The embeddable end date was inserted", official.getServiceTime().getEndDate() == null); // Change the updatable=false fields: official.setName("Guy Pelletier"); official.setSalary(100000); official.getServiceTime().setStartDate("Jan 30, 2008"); // Update the insertable=false fields: official.setAge(25); official.setBonus(10000); official.getServiceTime().setEndDate("Jul 1, 2010"); commitTransaction(em); // Close the EM, clear cache and get new EM. closeEntityManager(em); clearCache(); em = createEntityManager(); // The refreshed official at this point should not have had any // update changes to name but age should now be updated. Official refreshedOfficial = em.find(Official.class, initialOfficial.getId()); assertTrue( "The refreshedOfficial did not match the original", getServerSession().compareObjects(initialOfficial, refreshedOfficial)); } catch (RuntimeException e) { if (isTransactionActive(em)) { rollbackTransaction(em); } fail("An exception was caught during create operation: [" + e.getMessage() + "]"); } finally { closeEntityManager(em); } }