(I've already read the wikibooks article a thousand times.)
OK, this is what I suspected. Your statement "@PrimaryKeyJoinColumn is always read-only" makes perfect sense to me. However, I have the following mapping which gives me headaches with your answer. (I'm in a JPA
1.0 environment (JavaEE 5) with Hibernate 3.5.4)
Table first:
As you can see there's a composite PK on the table with game_id being an FK column to Games.id. is_home is a simple PK column which goes into the PK class. That's about it. Here's the (generated) JPA 1.0 code:
Composite PK class using @EmbeddedId:
Hibernate 3.5.4 produces a stack trace on calling Persistence.createEntityManagerFactory("bbstats"):
Hibernate is complaining about game_id not being insertable=false and updatable=false. According to your statement and my suspicion the @PrimaryKeyJoinColumn should do just that. Note, that I put the insertable = false, updatable = false on the ID class' game_id property, because when using an @IdClass implementation instead of @EmbeddedId "insertable = false, updatable = false" is put into the redundant column's @Id annotation, too. (it might be wrong to do so)
I was able to get rid of the Hibernate exception by using
@ManyToOne
@
PrimaryKeyJoinColumn(name = "game_id", referencedColumnName = "id"
, insertable = false, updatable = false)
private Game game = null;
to give:
This however means one of two things:
1. Your statement and my suspicion are wrong.
or
2. Hibernate has an issue correctly interpreting @PrimaryKeyJoinColumn
It raises the question for me, as I'm trying to create JPA 1.0 code to be used with Hibernate, if Hibernate 3.x can be used in a JPA 1.0 environment at all.
See:
https://coderanch.com/t/509568/ORM/java/Hibernate-JPA
For me, it's a mystery why
@PrimaryKeyJoinColumn(name = "game_id", referencedColumnName = "id")
and
@JoinColumn(name = "game_id", referencedColumnName = "id", insertable = false, updatable = false)
aren't the same in Hibernate 3.5 and/or 3.6 (assuming JPA 1.0,
which doesn't allow adding @Id to @XToX associations)...
Comments?
Karsten