I got this error when I tried to map a child element by using its parent’s foreign key. I had a parent element with a region id (as foreign key) and I needed to get the child element whose primary key was this region id (and a language id). My child element (
Region.hbm.xml
) had a composite primary key
1
2
3
4
| < composite-id > < key-property name = "regionCode" type = "integer" column = "RGNCDE" /> < key-property name = "languageCode" type = "integer" column = "LNGCDE" /> </ composite-id > |
and in my parent I did
1
2
3
| < property name = "regionCode" column = "REGCDE" type = "integer" /> < many-to-one name = "region" class = "my.package.hbm.Region" > |
but this resulted in “
org.hibernate.MappingException: broken column mapping for
” error.
I had to split the child’s composite key
1
2
3
4
5
| < id name = "regionCode" type = "integer" column = "RGNCDE" > < generator class = "assigned" /> </ id > < property name = "languageCode" column = "LNGCDE" type = "integer" /> |
and add a
formula
property in my parent’s class mapping
1
2
3
| < property name = "regionCode" column = "REGCDE" type = "integer" /> < many-to-one name = "region" class = "my.package.hbm.Region" formula = "REGCDE" /> |
so that hibernate could link the region id of the parent to the region id of the child. And since I needed a record based also on the language code (but my parent didn’t have any language code column) I had to manually add search criteria
1
| crit.createCriteria( "region" ).add(Restrictions.eq( "languageCode" , 1 )); |
No comments:
Post a Comment