Seems as if removing id from parent and category fixed the issue.
// this will be called by TreeModelAdapter.getChildren(CategoryNode node) public List<CategoryNode> getChildren(CategoryNode node) { return findByCriterion(Restrictions.eq("parent", node.getCategory())); } Do you see any negative drawbacks to that? On Sat, Feb 18, 2012 at 8:53 PM, George Christman <gchrist...@cardaddy.com>wrote: > Interesting knowing hibernate adds extra queries, how would you go about > setting up the parent relationship in the entity? > > > On Sat, Feb 18, 2012 at 4:34 PM, Lance Java [via Tapestry] < > ml-node+s1045711n5495924...@n5.nabble.com> wrote: > >> > Thanks Lance >> No problem >> >> > I did want to say I finally got the tree to work yay!! >> Great >> >> > I needed to add ".id" to the restriction. >> Depending on how you've set up your hibernate entities, you may not have >> the actual parent id available on your entity and may have to access it >> through the parent object then get it's id. As I said before... hibernate >> often forces you to do stupid things. In this case you have actually done >> an unnecessary join to the table again to get the parent's properties >> when >> you only actually needed the id. This wouldn't have been needed if you >> were >> using JDBC. As I mentioned earlier, try turning on hibernate's SQL >> logging >> and I'm sure you will see all sorts of stupid things going on. I'm in the >> minority though... there are many people who think hibernate is great... >> I'm just not one of them ;) >> >> > I was unable to @Inject CateogryDao into CategoryTreeModelAdapter >> You can only @Inject into services that are instantiated by Tapestry (ie >> services defined in AppModule). If you have created it using >> new CategoryTreeModelAdapter(), it's not under tapestry's control and >> doesn't get any injection goodies. >> >> > Lastly, one remaining bug thus far, when ever findRoots is null, the >> tree throws back the following exception. >> Try returning an empty list, not null >> >> I look forward to seeing this as part of JumpStart as it's not trivial. >> >> Cheers, >> Lance. >> >> >> On 18 February 2012 17:05, George Christman <[hidden >> email]<http://user/SendEmail.jtp?type=node&node=5495924&i=0>> >> wrote: >> >> > Thanks Lance, I'll read through those articles this weekend. I'd love >> to >> > learn more about these things so I wouldn't need to rely so heavily on >> the >> > support of the community. >> > >> > I did want to say I finally got the tree to work yay!! >> > >> > A few changes that had to be made >> > >> > public List<CategoryNode> getChildren(CategoryNode node) { >> > return findByCriterion(Restrictions.eq("parentCategoryId.id", >> > node.getCategory().getId())); >> > } >> > >> > I needed to add ".id" to the restriction. >> > >> > When ever your using createSQLQuery, you can directly iterate it. >> You'll >> > need to use a .list() be for using iterator. >> > >> > I did end up getting the tapestry service working, apparently my issue >> had >> > to do with me trying to inject HibernateCategoryDao rather than >> > CategoryDao. >> > >> > I was unable to @Inject CateogryDao into CategoryTreeModelAdapter, I >> had to >> > pass it in through a constructor. Is there away to use Inject outside >> of >> > page and component classes? >> > >> > Lastly, one remaining bug thus far, when ever findRoots is null, the >> tree >> > throws back the following exception. >> > >> > java.lang.NullPointerExceptionFilter stack frames Stack trace >> > >> > - >> org.apache.tapestry5.corelib.components.Tree$3.render(Tree.java:150) >> > - >> > >> org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72) >> >> > >> > - >> > >> org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:124) >> >> > >> > - >> > >> org.apache.tapestry5.internal.services.MarkupRendererTerminator.renderMarkup(MarkupRendererTerminator.java:37) >> >> > >> > - >> > >> org.apache.tapestry5.services.TapestryModule$30.renderMarkup(TapestryModule.java:1979) >> >> > >> > >> > I feel as if this may be a Tapestry tree component issue? >> > >> > Thanks a ton Lance! >> > >> > >> > >> > On Sat, Feb 18, 2012 at 5:08 AM, Lance Java [via Tapestry] < >> > [hidden email] <http://user/SendEmail.jtp?type=node&node=5495924&i=1>> >> wrote: >> > >> > > Hi George, >> > > >> > > In you code, there should only be 2 references to >> HibernateCategoryDao. >> > > 1. In AppModule >> > > binder.bind(CategoryDao.class, HibernateCategoryDao.class); >> > > 2. In the HibernateCategoryDao class itself >> > > >> > > Every other class (page, value encoder, treeModelAdapter) should >> > reference >> > > CategoryDao >> > > eg @Inject CategoryDao categoryDao >> > > >> > > Interfaces are a contract and have no implementation details. It's >> much >> > > better to code against interfaces and only be bound to the actual >> > > implemtation at runtime for many reasons including: >> > > 1. In your unit tests, you could inject a MockCategoryDao and not >> require >> > > a >> > > database >> > > 2. In the future, you may need to change the implementation to a >> > > WebServiceCategoryDao (or something else) and all you need to change >> is >> > > AppModule >> > > 3. Tapestry uses the IOC pattern (inversion of control) and actually >> > > injects a wrapper around HibernateCategoryDao so the @Inject'ed bean >> is >> > > not >> > > actually an instance of HibernateCategoryDao (it does delegate to it >> > > though). >> > > 4. If you code to an interface, you can do all sorts fancy things >> with >> > > proxies including the interceptor pattern >> > > >> > > Some further reading >> > > http://en.wikipedia.org/wiki/Inversion_of_control >> > > http://en.wikipedia.org/wiki/Proxy_pattern >> > > http://en.wikipedia.org/wiki/Interceptor_pattern >> > > >> > > I've made a couple of mods to the code too: >> > > >> > > List<Category> cats = >> > > session.createCriteria(Category.class).add(criterion).list(); >> > > Map<Integer, CategoryNode> childNodes = new >> LinkedHashMap<Integer, >> > > CategoryNode>(); >> > > for (Category cat : cats) { >> > > CategoryNode childNode = new CategoryNode(); >> > > childNode.setCategory(cat); >> > > childNodes.put(cat.getId(), childNode); >> > > } >> > > if (!childNodes.isEmpty()) { // if empty, the next query will >> fail >> > > >> > > Query query = session.createSQLQuery( >> > > "select c1.id, count(c2.id) " >> > > + "from CATEGORY c1 " >> > > + "left join CATEGORY c2 on c2.parent_id = c1.id " >> > > + "where c1.id in (:catIds) " >> > > + "group by c1.id"); >> > > >> > > query.setParameterList("catIds", >> > childNodes.keySet().toArray()); >> > > List queryResult = query.list(); >> > > >> > > for (Iterator<Object[]> it = query.iterate(); it.hasNext(); >> ) { >> > > Object[] result = it.next(); >> > > Long childId = (Long) result[0]; >> > > Integer grandChildCount = (Integer) result[1]; >> > > CategoryNode childNode = childNodes.get(childId); >> > > childNode.setHasChildren(grandChildCount != 0); >> > > childNode.setLeaf(grandChildCount == 0); >> > > } >> > > } >> > > return new ArrayList<CategoryNode>(childNodes.values()); >> > > >> > > Cheers, >> > > Lance >> > > >> > > On 18 February 2012 02:55, George Christman <[hidden email]< >> > http://user/SendEmail.jtp?type=node&node=5495019&i=0>> >> > > wrote: >> > > >> > > > btw, I should mention the model exception only happens while trying >> to >> > > > expand >> > > > the tree node. It produces an ajax exception. >> > > > >> > > > -- >> > > > View this message in context: >> > > > >> > > >> > >> http://tapestry.1045711.n5.nabble.com/Tapestry-TreeGrid-tp5462126p5494602.html >> > > >> > > > Sent from the Tapestry - User mailing list archive at Nabble.com. >> > > > >> > > > >> --------------------------------------------------------------------- >> > > > To unsubscribe, e-mail: [hidden email]< >> > http://user/SendEmail.jtp?type=node&node=5495019&i=1> >> > > > For additional commands, e-mail: [hidden email]< >> > http://user/SendEmail.jtp?type=node&node=5495019&i=2> >> > > > >> > > > >> > > >> > > >> > > ------------------------------ >> > > If you reply to this email, your message will be added to the >> discussion >> > > below: >> > > >> > > >> > >> http://tapestry.1045711.n5.nabble.com/Tapestry-TreeGrid-tp5462126p5495019.html >> > > To unsubscribe from Tapestry TreeGrid, click here< >> > >> > >> > > . >> > > NAML< >> > >> http://tapestry.1045711.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml >> > > >> > > >> > >> > >> > >> > -- >> > George Christman >> > www.CarDaddy.com >> > P.O. Box 735 >> > Johnstown, New York >> > >> > >> > -- >> > View this message in context: >> > >> http://tapestry.1045711.n5.nabble.com/Tapestry-TreeGrid-tp5462126p5495570.html >> >> > Sent from the Tapestry - User mailing list archive at Nabble.com. >> > >> >> >> ------------------------------ >> If you reply to this email, your message will be added to the >> discussion below: >> >> http://tapestry.1045711.n5.nabble.com/Tapestry-TreeGrid-tp5462126p5495924.html >> To unsubscribe from Tapestry TreeGrid, click >> here<http://tapestry.1045711.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=5462126&code=Z2NocmlzdG1hbkBjYXJkYWRkeS5jb218NTQ2MjEyNnwxNjMyOTYxMjA3> >> . >> NAML<http://tapestry.1045711.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> >> > > > > -- > George Christman > www.CarDaddy.com > P.O. Box 735 > Johnstown, New York > > > -- George Christman www.CarDaddy.com P.O. Box 735 Johnstown, New York -- View this message in context: http://tapestry.1045711.n5.nabble.com/Tapestry-TreeGrid-tp5462126p5496233.html Sent from the Tapestry - User mailing list archive at Nabble.com.