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.

Reply via email to