Hacker News new | ask | show | jobs
by robfig 5324 days ago
Yep, you figured it out. JPA requires you to set it on both sides. (Well, really you only HAVE to set it on the owning side of the association, which is what Hibernate monitors, but you should do both. Otherwise, a future programmer may be surprised that the objects don't have a consistent view of the association later on.
3 comments

Yeah, I can't believe JPA/most ORMs don't maintain both sides of a relationship. That sort of stuff should just work.

I implemented my own ORM (http://joist.ws) a few years ago to solve this and my other JPA/Hibernate annoyances. It works really well, modulo the fact that I suck at docs/promotion/etc. so it doesn't have many users (working on that).

Also note that, specific for the playframework, someone seems to have implemented the necessary magic in a plugin:

http://www.playframework.org/modules/associations

Which is nifty, other than I'm slightly wary of the "magic that happens via runtime class rewriting" that seems to be Play's standard way of doing things. The results are admittedly impressive, but it seems like you're coupling yourself to yet-another-runtime-environment/container for things to work right.

I had a similar problem to this, it pissed me off the ages although I did spend allot of time trying to do it with @ManyToMany as having a separate Entity just for the relationship seemed like bloat to me. As I recommended before, read the book "Java Persistence with Hibernate" and things will start to make more sense.

Hibernate is generally far more concerned with being flexible and robust than it is with being DRY or providing a perfect database abstraction. You really do still have to think about your data from the point of view of the DBMS regards 'Owning' Associations etc.

One thing with Play! is that it does try to over abstract hibernate a little bit and turn it into ActiveRecord which is fine for simple things but hibernate is not like ActiveRecord!

B-b-b-but DRY. Okay, thanks for reassuring me I'm not doing it wrong and there's not a @UpdateAutomaticallyLikeActiveRecord annotation I'm missing or something :)