cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Borut Bolčina <borut.bolc...@gmail.com>
Subject Re: Cayenne vs Hibernate Comparison
Date Mon, 06 Sep 2010 20:10:23 GMT
2010/9/6 Robert Zeigler <robert.zeigler@roxanemy.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 @Cascade 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 <jfbaldwin@earthlink.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
> >>
> >>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message