I'm working with EJB 3.0 RC1 and JBoss 4.0.2, and I have the following problem:
I've got two Entity Beans: Father, Son; where the relationship is for 1 father, N sons. Between both of them, there's the following link:
In the father:
@OneToMany(cascade=CascadeType.ALL, mappedBy="father")
private Collection sons = new HashSet();
In the son:
@ManyToOne
@JoinColumn(name="idFather")
Father father;
Also, in both entities, there's an attribute used for versioning by EJBs, defined as:
@Version
private Long vers;
When trying to persist a new father, no matter if it has sons or not, doing entityManager.persist(father) or entityManager.merge(father), throws me the following exception:
ERROR [AssertionFailure] an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: dirty, but no dirty properties
at org.hibernate.event.def.DefaultFlushEntityEventListener.scheduleUpdate(DefaultFlushEntityEventListener.java:226)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:144)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:187)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:73)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:750)
(I'll ommit the rest of the StackTrace).
The strange thing is that, if I remove the @Version tag, all the entities are persisted correctly.
On the other hand, if I retrieve an entity (entityManager.createQuery(...).getSingleResult()), modify it, and then
persist it again, EJBs do it without any problems (even with the @Version tag).
Any ideas where the problem might be? Thanks in advance.