Code Monkey home page Code Monkey logo

Comments (9)

GoogleCodeExporter avatar GoogleCodeExporter commented on September 27, 2024
Here is an initial attempt at adding findByExample() features.  Let me know 
what you
think.

Original comment by [email protected] on 23 Feb 2009 at 6:09

Attachments:

from hibernate-generic-dao.

GoogleCodeExporter avatar GoogleCodeExporter commented on September 27, 2024
I'll have time to look at your comments more in depth in a few days, but I'd 
like to 
make some comments now that may be helpful. I haven't looked at your patch yet, 
so 
sorry if what I say does not apply.

You may or may not know that the project is architected so that you can use 
your own 
implementations of of the Generic DAOs or extend whats there and use that as 
your DAO 
base. Your idea of using an example to build a search object is probably the 
best way 
to plug extra functionality into the framework. I'm excited to see what you 
come up 
with for this. I do think this could be a good feature to add to the framework.

I'll have a closer look at this in a couple days. Thanks for your comments. I 
hope 
this project will be of use to you. My plan is to make the upcoming version or 
so a 
1.0 version. I think what's there is pretty solid and complete.

Original comment by dwolvert on 26 Feb 2009 at 3:19

from hibernate-generic-dao.

GoogleCodeExporter avatar GoogleCodeExporter commented on September 27, 2024
Thanks for your reply.  The patch actually adds findByFilter and countByFilter
methods to the DAOs themselves.  I guess I should have considered creating my 
own
implementing of Generic DAO, but it seemed like a useful thing to make 
available for
everyone who wanted to use this library.  Maybe that is just because of my use 
case
however.

My project is being built with Apache Wicket which has features for creating 
elements
such as lists of entities that can be sorted, paginated, filtered, etc.  To do 
the
filtering, you pass an instance of an entity that it uses as an example.  So it
really simplifies things if the DAO itself can handle using an entity as an 
example.
Also, the Wicket DataProvider has a size() method that needs implementing, and I
wasn't thrilled with the searchAndCount approach since all I want is the size, I
don't want to fetch data too.

However, I implemented this very quickly, so I'm sure there are probably better
designs or solutions.  I did first consider using the search object and passing 
an
example entity to it before implementing it into the DAO itself.  It sounds 
like you
think that might be the right approach too.  

My thoughts were that the Search object would need to use reflection to figure 
out
how to build the search object based on the entity's property types and values. 
But I
quickly decided that was too much to take on since I needed a quick solution.  
It was
so much easier to just do this in the DAO:

protected <T> List<T> _findByFilter(T filterEntity, String[] excludeProperty) {
        Criteria crit = getSession().createCriteria(getPersistentClass());
        if (filterEntity != null) {
            Example example =  Example.create(filterEntity);
            if (excludeProperty != null) {
                for (String exclude : excludeProperty) {
                    example.excludeProperty(exclude);
                }
            }
            crit.add(example);
        }
        return crit.list();
};

(Note that the code above differs from the patch as I fixed a bug)



Original comment by [email protected] on 27 Feb 2009 at 10:24

from hibernate-generic-dao.

GoogleCodeExporter avatar GoogleCodeExporter commented on September 27, 2024
Enhancement marked as accepted. Find by example will be planned for an upcoming 
version.

Original comment by dwolvert on 11 Mar 2009 at 8:59

  • Changed state: Accepted
  • Added labels: Type-Enhancement
  • Removed labels: Type-Defect

from hibernate-generic-dao.

GoogleCodeExporter avatar GoogleCodeExporter commented on September 27, 2024
yowzator,

I finally had a chance to review your comments in depth. When we do add find by 
example to the framework, I think we will use introspection to do it manually. 
This 
way we will be able to preserve all of our other search options while using 
find by 
example.

For now, my suggestion for you is to put your new DAO methods in new 
Generic/General 
DAO classes that extend from the frameworks Generic/General DAO classes. This 
way you 
keep the framework source unchanged, which makes future upgrades much easier 
for you.

You also made a comment about searchAndCount() being too much. Did you notice 
the 
count() method?

Thanks for the idea of adding find by example to the framework.

Original comment by dwolvert on 11 Mar 2009 at 9:13

from hibernate-generic-dao.

GoogleCodeExporter avatar GoogleCodeExporter commented on September 27, 2024
dwolvert,

Sounds great!  I assume you want to add search by example as a feature of Search
instead of the DAO directly?

I'm not sure why I said something about the searchAndCount() before.  I had 
reviewed
the code and saw the count() method, but I recall thinking there was a 
limitation for
some reason.  I just looked again and the issue didn't jump out at me.  Maybe 
it had
something to do with my own really bad implementation of countByFilter:

protected int _countByFilter(Object filterEntity) {
    return _countByFilter(filterEntity,null);
};

protected int _countByFilter(Object filterEntity, String[] excludeProperty) {
    return _findByFilter(filterEntity,excludeProperty).size();
};

protected <T> List<T> _findByFilter(T filterEntity) {
    return _findByFilter(filterEntity,null);
};

protected <T> List<T> _findByFilter(T filterEntity, String[] excludeProperty) {
        Criteria crit = getSession().createCriteria(getPersistentClass());
        if (filterEntity != null) {
            Example example =  Example.create(filterEntity);
            if (excludeProperty != null) {
                for (String exclude : excludeProperty) {
                    example.excludeProperty(exclude);
                }
            }
            crit.add(example);
        }
        return crit.list();
};

Anyway, I assume that when find by example is added, there will be a way to do a
count by example too.  So we can leave this alone for now.


Original comment by [email protected] on 11 Mar 2009 at 10:00

from hibernate-generic-dao.

GoogleCodeExporter avatar GoogleCodeExporter commented on September 27, 2024

Original comment by dwolvert on 13 Mar 2009 at 4:40

from hibernate-generic-dao.

GoogleCodeExporter avatar GoogleCodeExporter commented on September 27, 2024
This feature will be available in 0.4.3

Original comment by dwolvert on 30 Apr 2009 at 4:41

  • Changed state: Started

from hibernate-generic-dao.

GoogleCodeExporter avatar GoogleCodeExporter commented on September 27, 2024
Feature is in 0.4.3

Original comment by dwolvert on 1 May 2009 at 8:47

  • Changed state: Verified

from hibernate-generic-dao.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.