"Sammy8306" wrote : As far as I know, SMPC is scoped over the conversation.
That would be the implicit temporary conversation if no conversation is started
manually.
| You have two options: either make sure the edits happen in the same
conversation (and therefore the same EM) or merge the offending object into the
second EM instance (using em.merge()).
Hmm. I thought to have done that. The selectBenutzer() method which is called
on selection of a Benutzer in the list calls beginConversation(), which
is marked with @Begin(flushMode = FlushModeType.MANUAL)
then when the save butten is pressed commit() is called which is marked with
@End(beforeRedirect=true) and calls em.flush().
Would'nt that mean i span a conversation around the whole edit process ?
"petemuir" wrote : Yes, use a SMPC, not an extended PC. You don't want the
@Transactional on those methods (it's an entity bean)
Can you please explain why thats not needed? Do Entity beans always have an
implicit transactional behavior??
"petemuir" wrote : and you probably want to let hibernate take care up updating
the relationship for you - call entityManager.refresh(foo) to get hibernate to
do this.
cool. So i dont need the add/remove on the list? But where should i do that
call? I suppose i cant do it in the entity itself, because that would be ugly
despite the fact that the entity doesnt know the PC.
So i tried to do it in BenutzerManager.save() with no luck like that:
| @DataModelSelection
| @Out(required = false)
| private BenutzerImpl selectedBenutzer;
|
| private GruppeImpl selectedGruppe;
|
| public void selectBenutzer()
| {
| selectedGruppe =
mowitaEntityManager.merge(selectedBenutzer.getGruppe());
| beginConversation();
| // log.info("BenutzerManager selectBenutzer(#0)\n",
selectedBenutzer);
| // log.info("BenutzerManager editedBenutzer(#0)\n",
editedBenutzer);
|
| // benutzer= selectedBenutzer;
| }
|
| @End(beforeRedirect=true)
| public void commit()
| {
| log.info("Merging selectedBenutzer: #0", selectedBenutzer);
| mowitaEntityManager.merge(selectedBenutzer);
|
| log.info("refreshing selectedGruppe: #0", selectedGruppe);
| mowitaEntityManager.refresh(selectedGruppe);
|
| log.info("flushing...");
| mowitaEntityManager.flush();
|
| mowitaEntityManager.refresh(selectedBenutzer.getGruppe());
| mowitaEntityManager.flush();
|
| }
|
I get an java.lang.IllegalArgumentException: Entity not managed by the call to
mowitaEntityManager.refresh(selectedGruppe);
The question is, how to get the gruppe that was selected before the user choose
a new one, because if i call selectedBenutzer.getGruppe() in the save() method
i already get the new Gruppe. Refreshing that newly selected Gruppe seems to
work although i gat a lazy initialisation exception afterwards, when trying ot
show the list of Gruppen.
Thanks for your help,
Tobias
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4040889#4040889
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4040889
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user