Re: Cayenne vs Hibernate Comparison

From: Borut Bolčina (borut.bolcin..mail.com)
Date: Mon Sep 06 2010 - 20:10:23 UTC

  • Next message: Joe Baldwin: "Re: Cayenne vs Hibernate Comparison"

    2010/9/6 Robert Zeigler <robert.zeigle..oxanemy.com>

    >
    > On Sep 6, 2010, at 9/61:47 PM , Borut Bolčina wrote:
    >
    > > Hello Joe,
    > >
    > > I just recently began two projects based on Hibernate (and Tapestry 5),
    > so I
    > > have limited knowledge to compare, but some of the differences
    > immediately
    > > showed up:
    > >
    > > 1.Code Life cycle
    > > If you have the luxury to start a project with no database schema, then
    > in
    > > Hibernate you can start with POJOs, annotate them, create database on the
    > > fly (just by configuration) and make changes in code only. Another
    > approach
    > > is to create an ER model (in MySQL Workbench for example), forward
    > > engineer/synchronize with the database and later create JAVA code with
    > the
    > > Hibernate tools in Eclipse. But the tool is limited, you have to correct
    > > some output by hand. If you make lots of changes in the auto generated
    > class
    > > and if you make changes in your favorite ER modelling tool and make
    > changes
    > > to the database with this tool, then you have to re-generate java code at
    > > least a few times and than means you have to re-generate this code to
    > some
    > > other package (I use com.acme.entities.generated) and make local merge of
    > > the old POJOs with the new ones. It doesn't consume much time, but with
    > > Cayenne you have auto-generated classes and subclasses where you put your
    > > business logic. I like the Cayenne approach, but I never got used to
    > Cayenne
    > > modeler, since ot does not offer a graphical way of drawing or displaying
    > db
    > > artifacts (ER model). If one prefers to start a fresh db design with
    > his/her
    > > favorite ER modeling tool, then with Cayenne you reverse engineer the db
    > > schema with the modeler (the db engine must support constraints for
    > > relationships to appear in the modeler). When rev-engineered and not
    > > satisfied with the names of the relationship names (as was the case
    > before
    > > smart naming strategy) you had to correct each one in the modeler and
    > then
    > > (re)create the java classes. But since only the "auto" classes are
    > > (over)written no harm is done, except for the compiler errors which
    > > immediately show the location of offending method names. If one wants to
    > > have ER model, Cayenne model and the code itself in sync there is a lot
    > of
    > > discipline to commit to. I think this is easier with Hibernate
    > POJOs/Eclipse
    > > Hibernate Tools/ER modeler, at least you don't have to deal with two GUI
    > > tools. I would love to hear how other manage the life cycle - code/model
    > > modifications. I do not have much experience starting with an existing
    > > database - I guess I am the lucky one :-)
    > >
    >
    > :) Personal preference on this one, I guess. I've never much cared for ER
    > diagrams. They're pretty, but I personally find the CayenneModeler's
    > approach a faster way to work... usually. ;)
    >

    Yes indeed. I always like to keep my ER diagrams at my eye-level at the
    desktop where I work, just for the reference when someone walks by and asks
    where is that data stored. And it looks nice besides my other weird posters
    :-)
    Seriously - working with more then 5 tables really helps me understand the
    data relationships and I think ER diagrams are very much standard as long as
    RDMS will be around.

    >
    >
    > > 2.ObjectContext versus Session
    > > This one was a really bad surprise when started with Hibernate. Object
    > life
    > > cycle is much more natural with Cayenne. My first Lazyloading Exception
    > > emotion was: "What the hell am I doing wrong?". Then I realized that I
    > can
    > > not follow the relationships if not eagerly fetched. _______ (insert some
    > > ugly word). A big plus for Cayenne here. I was told that Seam framework
    > has
    > > solved the LazyLoadingException. Is this correct?
    > >
    >
    > I've heard it helps. Gavin is a committer on the Seam project, is he not?
    > Still strikes me as odd that it requires an "application level framework" to
    > cover up what is, IMO, an ORM-level hole. :)
    >

    If this is true, yes, it is odd.

    >
    > > 3.POJO versus DataObject
    > > I haven't found a downside with my persistent objects inheriting from
    > > DataObjects. POJO hype?
    > >
    >
    > Definitely agree.
    >
    > > 4.Bidirectional relationships
    > > Associations in Hibernate are not inherently bidirectional as are in
    > > Cayenne. According to Hibernate book this is considered a good thing.
    > Quote:
    > > "POJO oriented persistence engines such as Hibernate don't implement
    > managed
    > > associations. Contrary to EJB 2.0 CMR, Hibernate and JPA associations are
    > > all inherently unidirectional. As far as Hibernate is concerned, the
    > > association from Bid to Item is a different association then the
    > association
    > > from Item to Bid! This is a good thing - otherwise your entity classes
    > > wouldn't be usable outside of a run time container.". I don't think this
    > is
    > > a valid reason - you can use Cayenne in whatever environment you want and
    > it
    > > manages the bidirectional relationships for you.
    > >
    >
    > To be fair, you /can/ make bi-directional properties. But it's the
    > difference in defaults: Cayenne defaults to bi-directional; hibernate to
    > unidirectional, and it requires much more work in hibernate to make the
    > properties bi-directional. To make them "unidirectional" in cayenne requires
    > deleting the corresponding property/mapping. ;)
    >

    Not so much work to make them bidirectional, but using them requires a
    utility method to be written for each bi-directional association so one does
    not forget to set the other site. It feels me uncomfortable. Take a look at
    this:
    http://stackoverflow.com/questions/3528595/hibernate-link-table-with-additional-columns-saving-in-one-transaction
    Any comments from Cayenne perspective?

    What also bothers me is this..ascade annotation which must be set on the
    getters to save the parts of object graph you want to if you don't want to
    have many lines of code.

    > > 5.Documentation
    > > Hibernate wins here totaly. Not only it gives confort to developers and
    > > managers, the book "Java persistence with Hibernate" really teaches you
    > > techniques and good practices. Also gives some recipes and anti-patterns.
    > > Cayenne will stay marginal if no book goes to print.
    > >
    >
    > I confess, I don't have Java persistence with Hibernate (I should probably
    > buy it, but I can't bring myself to contribute $$ to the hibernate ecosystem
    > ;). The hibernate online docs are, in a sense, more complete than the
    > cayenne docs. But the cayenne docs are, to me, at least, more
    > /informative/.
    > Also, I find cayenne much more /intuitive/. So, whereas I'm constantly
    > frustrated with the hibernate online documentation, I haven't felt that way
    > toward cayenne. ;) But that's an individual thing, and YMMV. Certainly,
    > there are books for Hibernate, at once a consequence and cause of its
    > success.
    >

    Cayenne's documentation lacked (lacks) info on Caching and everyday
    practices.

    >
    > > 6.Integration to other frameworks
    > > Hibernate wins here also. There are a number of frameworks which
    > integrate
    > > with Hibernate, just google "hibernate integration". Where is my long
    > > awaited T5.2-Cayenne bridge? :-)
    > >
    >
    > Check out the trunk source? It's compatible with T5.2. At least, I have
    > projects that are running with T5.2 and the latest t5cayenne source. :)
    > Sorry, I've been crazy busy lately and haven't had time to put together a
    > real release. But the code has made some nice progress in the last 6 weeks
    > or so, including T5.2 compatibility and improved ValueEncoder support (trunk
    > adds support for multi-key PK's. Take that, tapestry-hibernate! ;). I'm
    > also planning on either updating the EntityField, or creating an alternative
    > component (and deprecating EntityField) that works better. I have a working
    > prototype of said new component in a personal project I'm working on, but it
    > still has a couple of quirks that I need to fix before moving it directly
    > into T5cayenne.
    >

    Glad to hear that. But you are like those RAF's Tornado airplanes, they fly
    well bellow the radar :-)

    -Borut

    >
    > Robert
    >
    >
    > > These are just first observations I encountered during first two months
    > of
    > > using Hibernate.
    > >
    > > Regards,
    > > Borut
    > >
    > >
    > > 2010/9/5 Joe Baldwin <jfbaldwi..arthlink.net>
    > >
    > >> Hi,
    > >>
    > >> I am again responsible for making a cogent Cayenne vs Hibernate
    > Comparison.
    > >> Before I "reinvent the wheel" so-to speak with a new evaluation, I would
    > >> like to find out if anyone has done a recent and fair
    > comparison/evaluation
    > >> (and has published it).
    > >>
    > >> When I initially performed my evaluation of the two, it seemed like a
    > very
    > >> easy decision. While Hibernate had been widely adopted (and was on a
    > number
    > >> of job listings), it seemed like the core decision was made mostly
    > because
    > >> "everyone else was using it" (which I thought was a bit thin).
    > >>
    > >> I base my decision on the fact that Cayenne (at the time) supported
    > enough
    > >> of the core ORM features that I needed, in addition to being very
    > similar
    > >> conceptually to NeXT EOF (which was the first stable Enterprise-ready
    > ORM
    > >> implementations). Cayenne seems to support a more "agile" development
    > >> model, while being as (or more) mature than EOF. (In my opinion. :) )
    > >>
    > >> It seem like there is an explosion of standards, which appear to be
    > driven
    > >> by "camps" of opinions on the best practices for accomplishing
    > abstraction
    > >> of persistence supporting both native apps and highly distributed SOA's.
    > >>
    > >> My vote is obviously for Cayenne, but I would definitely like to update
    > my
    > >> understanding of the comparison.
    > >>
    > >> Thanks,
    > >> Joe
    > >>
    > >>
    >
    >



    This archive was generated by hypermail 2.0.0 : Mon Sep 06 2010 - 20:11:08 UTC