Nevermind, got it!

        public HibernateConfirmationDetailsDao(Class<T> clazz) {
                super(clazz);
        }

Just like in HibernateGenericDao.



Mike Horwitz wrote:
> 
> On Jan 7, 2008 6:11 PM, leojhartiv <[EMAIL PROTECTED]> wrote:
> 
>>
>> I'm using the GenericDao approach discussed provided by appfuse.
>>
>> I have a DAO that is used to persist/get
>> ElectronicFormsConfirmationDetails
>> objects, where ElectronicFormsConfirmationDetails extends
>> ConfirmationDetails:
>>
>> public class ElectronicFormsConfirmationDetails extends
>> ConfirmationDetails
>> {
>>
>>        private DocumentDeliveryPreferences documentDeliveryPreferences;
>>
>>        ...
>> }
>> public class ConfirmationDetails extends IDObject {
>>
>>        private TaxEntity taxEntity;
>>        private Confirmation confirmation;
>>        private ElectionEvent electionEvent;
>>        private ActiveStatus activeStatus;
>>        private ConfirmationType confirmationType;
>>
>>        ...
>> }
>>
>> public interface ElectronicFormsConfirmationDetailsDao extends
>>                GenericDao<ElectronicFormsConfirmationDetails, Long> {
>>
>>        public ElectronicFormsConfirmationDetails findCurrentElection(
>>                        TaxEntity taxEntity);
>>
>> }
>>
>>
>> Now I'm going to have additional ConfirmationDetails types that will
>> extend
>> ConfirmationDetails, for instance:
>>
>> public class ServiceProviderConfirmationDetails extends
>> ConfirmationDetails
>> {
>>
>>        private AccessType accessType;
>>        private ServiceProvider serviceProvider;
>>        private boolean participating;
>>
>>        ...
>> }
>>
>> And its associated DAO will have many shared methods (but will certainly
>> have some that are unique to ServiceProviderConfirmationDetails):
>>
>> public interface ServiceProviderConfirmationDetailsDao extends
>>                GenericDao<ServiceProviderConfirmationDetails, Long> {
>>
>>        public ServiceProviderConfirmationDetails findCurrentElection(
>>                        TaxEntity taxEntity);
>>
>> }
>>
>> I'm finding that I'm generating a great deal of similar code due to this
>> scenario, so I was thinking of creating a ConfirmationDetailsDao, having
>> it
>> extend GenericDao and having the ServiceProviderConfirmationDetailsDao
>> and
>> ElectronicFormsConfirmationDetailsDao extend that:
>>
>>
>> public interface ConfirmationDetailsDao extends
>>                GenericDao<ConfirmationDetails, Long> {
>>
>>        public ConfirmationDetails findCurrentElection(
>>                        TaxEntity taxEntity);
>>
>> }
>>
>> public interface ElectronicFormsConfirmationDetailsDao extends
>>                ConfirmationDetailsDao {
>>        //Nothing yet
>> }
>>
>> public interface ServiceProviderConfirmationDetailsDao extends
>>                ConfirmationDetailsDao {
>>        //Nothing yet
>> }
>>
>>
>> This way, using Hibernate's polymorphism support, I would think I
>> wouldn't
>> need to write specific findCurrentElection methods for each
>> ConfirmationDetails DAO type.
>>
>> However, I'm not sure this approach is going to work.  For instance, if I
>> try to retrieve a ElectronicFormsConfirmationDetails object, using my
>> ElectronicFormsConfirmationDetailsDao:
>>
>> ElectronicFormsConfirmationDetails confirmationDetails =
>> electronicFormsConfirmationDetailsDao
>>                                .findCurrentElection(taxEntity);
>>
>> I receive the following compile-time error: "Type mismatch: cannot
>> convert
>> from ConfirmationDetails to ElectronicFormsConfirmationDetails"
>>
>> This makes sense, obviously, as my method signature for my
>> ElectronicFormsConfirmationDetailsDao, returns a ConfirmationDetails
>> object
>> as it is declared in the ConfirmationDetailsDao object.  I can cast the
>> object and the code works:
>>
>> ElectronicFormsConfirmationDetails confirmationDetails =
>> (ElectronicFormsConfirmationDetails)
>> electronicFormsConfirmationDetailsDao
>>                                .findCurrentElection(taxEntity);
>>
>> But it feels like a clunky solution to the problem.  How can the client
>> know
>> for sure that the returned ConfirmationDetails object is a
>> ElectronicFormsConfirmationDetails subclass?
>>
>> Does anyone have any suggestions on my approach?  Is there a better way I
>> can cut down on the redundancy in my DAO code, while not requiring the
>> client to cast calls?
> 
> 
> The simplest solution would probably be to use generics as per the
> GenericDao. So instead of
> 
> public interface ConfirmationDetailsDao extends
> GenericDao<ConfirmationDetails, Long>
> 
> Do something like
> 
> public interface ConfirmationDetailsDao<T extends ConfirmationDetails>
> extends GenericDao<T, Long>
> 
> Mike
> 
>>
>>
>>
>> Thanks for your help!
>> Leo
>>
>> --
>> View this message in context:
>> http://www.nabble.com/GenericDao-and-Class-Hierarchy---Approach--tp14672300s2369p14672300.html
>> Sent from the AppFuse - User mailing list archive at Nabble.com.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
> 
> 

-- 
View this message in context: 
http://www.nabble.com/GenericDao-and-Class-Hierarchy---Approach--tp14672300s2369p14676917.html
Sent from the AppFuse - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to