I have an entity class like -
Code:
public class Item {
@Id
//mapping
private Long id;
@ElementCollection
//mapping
private Set<ItemWrapper> wrapperSet;
@Transient
private Map<Item, Boolean> itemPredecessor;
..........
..........
@PrePersist
@PreUpdate
private void populateSet() {
wrapperSet.clear();
for(Map.Entry<Item, Boolean> entry : itemPredecessor.entrySet()) {
wrapperSet.add(...);
}
}
..............
}
Code:
@Embeddable
public class PredecessorWrapper {
@Column(...)
private Long dependingId;
@Column(...)
private Integer ignoreErrors;
.......
}
What happens is when I call entityManager.merge(...) with newly instantiated object with itemPredecessor map having some entries in it, hibernate invokes callback method populateSet() with copy of instance passed to merge() which doesn't contain itemPredecessor map with respective entries as itemPredecessor is marked @Transient. When I use entityManager.persist(), it works fine as with actual instance passed to persist() is used to invoke callback method. I am using hibernate 4.3.5. Is this the right behavior?