Thanks for all the good information, schauder. Well, I tried that first option, or at least my interpretation of it, and found the following exception:
Code:
java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
at java.util.AbstractList$Itr.next(AbstractList.java:420)
at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:213)
at com.myapp.persistence.PersistenceUtility.store(PersistenceUtility.java:35)
at com.myapp.persistence.test.PersistenceUtilityStoreOrderTest.testStoreOrder(PersistenceUtilityStoreOrderTest.java:46)
Here is the code I tried inside the getOrderItems getter method:
Code:
private List<OrderItem> getOrderItemList(List<T> internalOrderItemsFromClient, HashMap<String, T> map) {
internalOrderItemsFromClient.clear();
internalOrderItemsFromClient.addAll(map.values());
return internalOrderItemsFromClient;
}
In this code, internalOrderItemsFromClient is the List object I receive from Hibernate (or anyone else for that matter) in the setter method. Basically, I receive the collection and hold onto it. Then in the getter, I simply remove everything in the list and add what's in the map.
Clearly, this is causing issues for Hibernate, so I will need better clarification on how I am to proceed.
In an attempt to clarify what exactly I want to do, I want to manage my order items in a hashmap and perform all kinds of logic on the map. But when it is time to persist, I just want to store the values in the map rather than the entire map.
Please let me know if I need to be clearer. Any insight into resolving this last hurdle is appreciated.
Thanks.