entity-query vs. Manager-nested @Factory List
quilian Apr 25, 2007 8:43 AMHi all!
I declared the following in components.xml:
<framework:entity-query name="alleBenutzer" ejbql="select benutzer from BenutzerImpl benutzer" />
i assumed that this would also do the trick:
@Stateful
@Scope(ScopeType.SESSION)
@Name("gruppenManager")
public class GruppenManagerImpl implements Serializable, GruppenManager {
@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager em;
@DataModel // (scope=ScopeType.PAGE)
private List<GruppeImpl> gruppenList;
@Factory(value = "gruppenList")
public void findGruppen() {
gruppenList = em.createQuery("select gruppe from GruppeImpl gruppe order by id").getResultList();
}
...
}
I use s:selectItems and s:convertEntity to show the list of Gruppen:
<h:selectOneMenu id="selectGruppenAuswahl" value="#{selectedBenutzer.gruppe}" required="true">
<s:selectItems id="gruppenAuswahl" value="#{alleGruppen}" var="gruppeItem" label="#{gruppeItem.label}"/>
<s:convertEntity />
</h:selectOneMenu>
however, when using gruppenList instead of alleGruppen as value for s:selectItems the form looks like before, but on submission, i get this well know validation failed error:
selectGruppenAuswahl is not a valid entry.
The interesting this is, i get this only if i dont select another entry from the list. In that case i get the "detached entity passed to persist" exception, which happens anyway after the validation is complete. But thats for another posting. The this is the validation gets through if i select another entry.
I thought the two ways to do the query would be more or less interchangeable.
I dont know why, but the logged select statements are different for the two options:
for the framework:entity-query
11:05:16,984 INFO [STDOUT] Hibernate: select gruppeimpl0_.id as id5_, gruppeimpl0_.name as name5_, gruppeimpl0_.version as version5_, gruppeimpl0_.status as status5_ from gruppen gruppeimpl0_ 11:05:21,734 INFO [STDOUT] Hibernate: select gruppeimpl0_.id as id5_, gruppeimpl0_.name as name5_, gruppeimpl0_.version as version5_, gruppeimpl0_.status as status5_ from gruppen gruppeimpl0_
and for the @Factory solution:
11:01:42,593 INFO [STDOUT] Hibernate: select gruppeimpl0_.id as id1_, gruppeimpl0_.name as name1_, gruppeimpl0_.version as version1_, gruppeimpl0_.status as status1_ from gruppen gruppeimpl0_ 11:01:44,312 INFO [STDOUT] Hibernate: select gruppeimpl0_.id as id1_0_, gruppeimpl0_.name as name1_0_, gruppeimpl0_.version as version1_0_, gruppeimpl0_.status as status1_0_ from gruppen gruppeimpl0_ where gruppeimpl0_.id=?
I completely dont understand this. But it might be a clue. The first query is done when the page loads, whereas the latter is called when the form is submitted.
The generated HTML forms also differ in the selection index - the value which the client selects. The ordering is not the same. Could this be a reason?
Thanks for any help.
Tobias Kilian