Good discussions. I'd prefer that Domain object hold a DAO object.
It's so hard to inject DAO object into a domain object because domain objects are out of spring container's control. But we may use "Service Locator" to get a dao reference. The code looks like this:
AOP may faciliate Domain object's transaction demarcation. AspectJ is my choice.
private MyDao myDao = (MyDao)ApplicationContextHolder.getContext().getBean("myDao");
public int getSum( FilteringParams params)
return myDao.getSum(params, this);