[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-5741) @PrimaryKeyJoinColumn(...) is not working equivalently to @JoinColumn(..., insertable = false, updatable = false)
Karsten Wutzke (JIRA)
noreply at atlassian.com
Thu Nov 18 22:15:13 EST 2010
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5741?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=39159#action_39159 ]
Karsten Wutzke commented on HHH-5741:
-------------------------------------
BTW, you can find a PDF of the data model in the db dir.
> @PrimaryKeyJoinColumn(...) is not working equivalently to @JoinColumn(..., insertable = false, updatable = false)
> -----------------------------------------------------------------------------------------------------------------
>
> Key: HHH-5741
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5741
> Project: Hibernate Core
> Issue Type: Bug
> Components: annotations, core, entity-manager, metamodel
> Affects Versions: 3.6.0
> Environment: Hibernate Core 3.6, HSQLDB, JavaSE, Ant
> Reporter: Karsten Wutzke
> Priority: Critical
> Attachments: geoinfo-hib-joincolumn-working.zip, geoinfo-hib-primarykeyjoincolumn-broken.zip
>
>
> When annotating classes with @JoinColumn(..., insertable = false, updatable = false) validation is working as expected:
> @ManyToOne
> @JoinColumns(value = {@JoinColumn(name = "country_code", referencedColumnName = "country_code", insertable = false, updatable = false), @JoinColumn(name = "state_code", referencedColumnName = "state_code", insertable = false, updatable = false), @JoinColumn(name = "city_name", referencedColumnName = "name", insertable = false, updatable = false)})
> private City city = null;
> When annotating with the equivalent @PrimaryKeyJoinColumn, e.g.:
> @ManyToOne
> @PrimaryKeyJoinColumns(value = {@PrimaryKeyJoinColumn(name = "country_code", referencedColumnName = "country_code"), @PrimaryKeyJoinColumn(name = "state_code", referencedColumnName = "state_code"), @PrimaryKeyJoinColumn(name = "city_name", referencedColumnName = "name")})
> private City city = null;
> ... validation fails.
> As every child knows (*cough*) @PrimaryKeyJoinColumn(...) is equivalent to @JoinColumn(..., insertable = false, updatable = false). See here:
> http://stackoverflow.com/questions/4205628/jpa-is-primarykeyjoincolumn-the-same-as-joincolumn-insertable-u
> Stack trace:
> Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: geoinfo] Unable to build EntityManagerFactory
> at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:911)
> at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
> at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
> at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
> at tld.geoinfo.Main.main(Main.java:27)
> Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: tld.geoinfo.model.ZipArea column: city_name (should be mapped with insert="false" update="false")
> at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:675)
> at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:697)
> at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:719)
> at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:473)
> at org.hibernate.mapping.RootClass.validate(RootClass.java:235)
> at org.hibernate.cfg.Configuration.validate(Configuration.java:1332)
> at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1835)
> at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:902)
> ... 4 more
> Obviously, @PrimaryKeyJoinColumn is treated to be writable, which is wrong.
> I have attached two SSCCE programs using JavaSE, HSQLDB, and Ant. The one uses @JoinColumn and works, whereas the other uses @PrimaryKeyJoinColumn and doesn't work. Just enter "ant run" in a shell.
--
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