Hi!
Many of my entities have an id of type long. So I put the code (getters, setters ...) into an superclass. After I did it, the id wasn't initialized by hibernate any more, if I persisted an entity. Thats very strange.
Here is the code:
public class GenerateValueTestcase extends TestCase { @MappedSuperclass public static abstract class EntityWithIntId { private long id = -1; @Id @GeneratedValue(strategy = GenerationType.AUTO) public long getId() { return id; } public void setId(long id) { this.id = id; } } @Entity public static class TestEntity extends EntityWithIntId implements Serializable { private static final long serialVersionUID = 1L; } public void testGeneratedIds() { TestStarterRemote bean = UsefullFunctions.getTestStarterRemote(); Set<Long> ids = new HashSet<Long>(); final int NO_ENTITIES = 10; for (int i = 0; i < NO_ENTITIES; i++) { EntityWithIntId entity = new TestEntity(); entity = bean.merge(entity); ids.add(entity.getId()); } assertEquals("Each entity must have an unique id", NO_ENTITIES, ids .size()); } }
public <T> T merge(T o) { return entityManager.merge(o); }