MyEclipse Forums
This thread has been locked & this forum has been archived.
Please post new topics to Java EE Development (EJB, JSP, Struts, XDoclet, etc.)
View previous topic Printable version Log in to check your private messages View next topic
Author Message
wasss
Post subject: hibernate: Grabbing all rows from a table with a DAO  PostPosted: Apr 17, 2007 - 02:55 PM



Joined: Apr 10, 2007
Posts: 1

Hi,
I've been doing some tutorials for Hibernate using myeclipse (5.1.1 is the version I'm using), and they are really good.

However, after I did a simple java example of grabbing some table data, inserting a new record, then re-grabbing that data to see the new value added, I came up with a question.

"Is it possible to grab all the rows from a table? "

All the methods generated by the hibernate tools in myeclipse seem to expect one to grab specific entries or entries that satisfy a certain criteria. (which is probably the most popular usage)

So, I went into the DAO class and made a simple new method, with the query string
Code:
String queryString = "from [tableName] ";


and that does the trick.

Is there a way to autogenerate this method, or am I the only one who has wanted to do this?
I sifted thru the forums a bit but found nothing of the sort.
 
 View user's profile Send private message  
Reply with quote Back to top
support-rkalla
Post subject:   PostPosted: Apr 17, 2007 - 05:35 PM
Registered Member
Registered Member


Joined: Jan 06, 2004
Posts: 23818

You did the right thing, there is no way to auto-generate this yet, but it's a pending enhancement request. I'll add your vote to the issue.

_________________
Riyad
MyEclipse Support
 
 View user's profile Send private message Visit poster's website  
Reply with quote Back to top
sprior
Post subject:   PostPosted: Apr 18, 2007 - 04:33 AM
Registered Member
Registered Member


Joined: Nov 02, 2005
Posts: 157

This will retrieve all records (note that order is NOT guaranteed). Setting nothing on the example object allows everything to match.

YourClass foo = new YourClass();
List myList = dao.findByExample(foo);
 
 View user's profile Send private message Visit poster's website  
Reply with quote Back to top
sprior
Post subject: If you're expanding the DAO template...  PostPosted: Apr 18, 2007 - 04:58 AM
Registered Member
Registered Member


Joined: Nov 02, 2005
Posts: 157

If you're considering expanding the DAO template, let me share what I came up with which I'm pretty happy with.
This is a JDK1.5+ specific abstract generic DAO which has worked very well for me so far. The only thing I don't like is that I have to pass the object class as the first parameter for findById(), but I didn't see any other way to accomplish this.
This abstract DAO can sit in a common library someplace, then you bind it into a specific hibernate session factory with:

public class GenericDAO<POJO> extends AbstractGenericDAO<POJO> {

public Session getSession() {
return BaseDAO.getSession();
}
}


Then if you still need an object specific DAO you extend your GenericDAO (the example uses my Bookmark class):

public class BookmarkDAO extends GenericDAO<Bookmark>{
...
}


This structure means that you only need to create an object specific DAO when you have specific custom queries for that class.
For simple find by id's I use

GenericDAO<Bookmark> bookmarkDAO = new GenericDAO<Bookmark>();
Bookmark bookmark = bookmarkDAO.findById(Bookmark.class, 1);

It may be code bloat, but I find findByCriterion and findOneByCriterion to be VERY useful.

Note that a benefit of this code is that you avoid using @SuppressWarnings("unchecked") in
your user code or even in your custom DAO code.

Enjoy

---------------------------- snip --------------------------------
package com.geekster.hibernate.utils;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Order;

public abstract class AbstractGenericDAO<POJO> {

public abstract Session getSession();

public Criteria createCriteria(Class c){
return getSession().createCriteria(c);
}

public void save(POJO transientInstance) {
getSession().saveOrUpdate(transientInstance);
}

public void delete(POJO persistentInstance) {
getSession().delete(persistentInstance);
}

@SuppressWarnings("unchecked")
public POJO findById( Class c, Serializable id) {
return (POJO) getSession().get(c, id);
}

public List<POJO> findByExample(POJO instance) {
return findByCriterion(instance.getClass(), Example.create(instance));
}

public POJO findOneExample(POJO instance) {
return findOneByCriterion(instance.getClass(), Example.create(instance));
}

@SuppressWarnings("unchecked")
public List<POJO> findByCriterion( Class c, Criterion... criterion){
Criteria crit = createCriteria(c);
for (Criterion cr : criterion){
crit.add(cr);
}
return crit.list();
}

@SuppressWarnings("unchecked")
public POJO findOneByCriterion(Class c, Criterion... criterion){
Criteria crit = createCriteria(c);
for (Criterion cr : criterion){
crit.add(cr);
}
return (POJO) crit.uniqueResult();
}

@SuppressWarnings("unchecked")
public List<POJO> findByCriterion(Class c, Collection<Criterion> criterion, Collection<Order> orders){
Criteria crit = createCriteria(c);
if (criterion!=null){
for (Criterion cr : criterion){
crit.add(cr);
}
}
if (orders!=null){
for (Order order : orders){
crit.addOrder(order);
}
}
return crit.list();
}

@SuppressWarnings("unchecked")
public POJO findOneByCriterion(Class c, Collection<Criterion> criterion){
Criteria crit = createCriteria(c);
if (criterion!=null){
for (Criterion cr : criterion){
crit.add(cr);
}
}
return (POJO) crit.uniqueResult();
}

@SuppressWarnings("unchecked")
public POJO merge(POJO detachedInstance) {
return (POJO) getSession().merge(detachedInstance);
}

public void attachDirty(POJO instance) {
getSession().saveOrUpdate(instance);
}

public void attachClean(POJO instance) {
getSession().lock(instance, LockMode.NONE);
}
}
 
 View user's profile Send private message Visit poster's website  
Reply with quote Back to top
Display posts from previous:     
Jump to:  
All times are GMT - 6 Hours
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.
View previous topic Printable version Log in to check your private messages View next topic
Powered by PNphpBB2 © 2003-2004 The PNphpBB Group
Credits