[hibernate-issues] [Hibernate-JIRA] Commented: (HBX-733) Updated DAO code generation as discussed over the email
Alex Kalinovsky (JIRA)
noreply at atlassian.com
Wed Aug 30 09:10:24 EDT 2006
[ http://opensource.atlassian.com/projects/hibernate/browse/HBX-733?page=comments#action_24230 ]
Alex Kalinovsky commented on HBX-733:
-------------------------------------
Max,
I am totally open for comments and I can make adjustments to the code. Removing is always easier then adding:-)
> been looking into this today and got some reservations for parts of the
> code generated:
>
> e.g.
>
> why is isInitialized() needed in the dao public interface and why are you
> referring to net.sf.cglib.transform.impl.InterceptFieldCallback and other
> implementation details of hibernate ?
In my project we were using lazy properties. Initially the objects were loaded without the lazy properties. Later on, if the user wanted to see the details, those properties had to be initialized. The implementation was somewhat hairy and I think now Hibernate has a "fetch" keyword for eagerly initializing the lazy properties so I can take initialize() out. There's also an issue of loading lazy associations for a given instance. From my exeprience, Hibernate can only eagerly load up to 1 lazy collection, right? So if you have object A that is accociated with B, C and D. You can not run a query SELECT A LEFT JOIN FETCH B LEFT JOIN FETCH C LEFT JOIN FETCH D. So initialize() is handy for that.
You can argue that it should not be in the public interface and I have no problems removing it completely. Just let me know.
> what is the NAME constant in dao.ftl usable for ? It is exactly the same as
> someclass.class.getName() so why have a codegenerated constant for it ?
We use the constant to refer to the beans in generated Spring contexts. someclass.class.getName() is more combersome then someclass.NAME and doesn't provide as much flexibility. But I am not sure that it should be in a generic Hibernate DAO so if you want I can take it out.
If you recall, what I have is a complete code generator that generates HBM files, model objects, DAOs, services, Spring context that uses dependency injection to wire DAO, Service and Model class. It now has generation of Struts actions, forms, message and validation files. I don't know if you'd want to see the rest of the stuff in Hibernate tools but the NAME constant is in the application.
> Updated DAO code generation as discussed over the email
> -------------------------------------------------------
>
> Key: HBX-733
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HBX-733
> Project: Hibernate Tools
> Type: Patch
> Components: hbm2java, ant
> Versions: 3.1alpha5
> Environment: I have tested the patch on the latest version of Hibernate Tools I got from SVN 2 weeks ago.
> Reporter: Alex Kalinovsky
> Attachments: dao_generation.patch
>
> Original Estimate: 3 days
> Remaining: 3 days
>
> This should be a complete implementation of DAO generation according to the design we have discussed over the email. I've tested this on our project so the DAOs should be good to go, but of course a more diverse testing would be needed before releasing it to public. I'm open for recommendations and suggestions, so I see this as the first draft. Below is a list of files and comments. Contact me at kalinovsky at yahoo.com.
> src/java/org/hibernate/tool/hbm2x
> DAONewExporter.java This class is coded mainly to accept additional parameters such as dao package name and provide flexible
> file naming that is used by Ant task. It would not be needed if I integrate my changes into GenericExporter.
>
> src/templates/dao
> crudDao.ftl template for regeneratable CRUD interface
> crudDaoImpl.ftl template for regeneratable CRUD DAO implementation
> dao.ftl template for customizable DAO interface that extends CRUD interface
> daoImpl.ftl template for customizable DAO implementation that extends CRUD implementation
>
> src/templates/dao/base
> dao.ftl base interface for all DAOs
> queryDao.ftl base interface for all read-only entities
> crudDao.ftl base interface for all editable entities
> src/templates/dao/base/hibernate
> abstractDao.ftl base implementation of DAO using Hibernate
> abstractQueryDao.ftl base implementation of DAO for read-only entities using Hibernate
> abstractCrudDao.ftl base implementation of DAO for editable entities using Hibernate
> src/testsupport
> codegen.properties Test configuration to see DAO generation in action
> codegen-build.xml Test build file that generates DAOs for Author and Article and compiles generated code
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list