[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-3824) OneToOne join by Non-primary key column throws PropertyAccessException when join column is String
Sebastian Bolz (JIRA)
noreply at atlassian.com
Wed Jan 6 10:08:29 EST 2010
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-3824?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=35113#action_35113 ]
Sebastian Bolz commented on HHH-3824:
-------------------------------------
Hi,
I think, this issue is caused by the fact that you try to reference a column that is not the primary key. A look at org.hibernate.mapping.OneToOne shows:
public void createForeignKey() throws MappingException {
if ( constrained && referencedPropertyName==null) {
//TODO: handle the case of a foreign key to something other than the pk
createForeignKeyOfEntity( ( (EntityType) getType() ).getAssociatedEntityName() );
}
}
Hibernate always tries to join the primary key of the referenced entity and seems to ignore the referencedColumnName completely. Since Inventory.id is of type Long it naturally tries to read a Long and gets confused with the String. That is where the PropertyAccessException must come from.
A possible workaround would be to use ManyToOne instead. That should work. Anyway, we have the same problem and our model has quite a lot of one to one associations to non primary key columns and a ManyToOne association would be incorrect from the business point of view. Therefore I will vote for this bug and hope that it gets fixed soon.
Cheers!
> OneToOne join by Non-primary key column throws PropertyAccessException when join column is String
> -------------------------------------------------------------------------------------------------
>
> Key: HHH-3824
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3824
> Project: Hibernate Core
> Issue Type: Bug
> Components: query-criteria, query-hql
> Affects Versions: 3.3.1
> Environment: Microsoft SQL server 2005, Hibernate 3.3.1
> Reporter: sathish
> Attachments: trace.txt
>
>
> When i try to join 2 entities by OneToOne using a Non-primary key column, it throws the following exception:
> org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.xxx.domain.Inventory.sku
> Caused by: java.lang.IllegalArgumentException: Can not set java.lang.String field com.inwk.estore.server.domain.Inventory.sku to java.lang.Integer
> [Full stacktrace attached]
> sku is the Non-primary key String join column by which im trying to do a OneToOne join between Item and Inventory entity.
> Apparently its trying to interpret Sku as an Integer column. Adding columnDefinition as VARCHAR/String doesn't help either
> Mappings for Item and Inventory are below:
> class Item{
> @Id
> Long id;
> @Column
> String sku;
> //some more properties
> @OneToOne(optional = true)
> @JoinColumn(name = "sku", referencedColumnName = "sku", insertable = false, updatable = false)
> Inventory inventory;
> }
> class Inventory{
> @Id
> Long id
> @Column
> String sku
> @Column
> Long quantity;
> }
--
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