[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-6608) @JoinColumns doesn't work inside an @Embedded member

Joeri Hendrickx (JIRA) noreply at atlassian.com
Thu Aug 25 11:42:02 EDT 2011


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-6608?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=43354#comment-43354 ] 

Joeri Hendrickx commented on HHH-6608:
--------------------------------------

The embedded entity looks like this:

@Embeddable
public class EmbeddedEntity implements Serializable {

	@ManyToOne
	@JoinColumns({
			@JoinColumn(name="test", referencedColumnName="testRef"),
			@JoinColumn(name="test2", referencedColumnName="test2Ref")
	})
	private ReferencedEntity referencedEntity;
	
}

> @JoinColumns doesn't work inside an @Embedded member
> ----------------------------------------------------
>
>                 Key: HHH-6608
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6608
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: annotations, metamodel
>    Affects Versions: 3.5.6, 4.0.0.CR1
>         Environment: Version 3.5.6 and up, no DB
>            Reporter: Joeri Hendrickx
>         Attachments: hibernate-embedded-joincolumns.zip
>
>
> If you use multiple joincolumns on a @ManyToOne or @OneToOne field in an @Embedded class, hibernate will fail when building its metamodel with the following exception:
> Exception in thread "main" org.hibernate.MappingException: property [_model_MainEntity_embeddedEntity.referencedEntity] not found on entity [model.ReferencedEntity]
> 	at org.hibernate.mapping.PersistentClass.getRecursiveProperty(PersistentClass.java:379)
> 	at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:406)
> 	at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:111)
> 	at org.hibernate.cfg.AnnotationConfiguration.processEndOfQueue(AnnotationConfiguration.java:541)
> 	at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:523)
> 	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:380)
> 	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1377)
> 	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
> 	at model.Test.main(Test.java:12)
> Caused by: org.hibernate.MappingException: property [_model_MainEntity_embeddedEntity.referencedEntity] not found on entity [model.ReferencedEntity]
> 	at org.hibernate.mapping.PersistentClass.getRecursiveProperty(PersistentClass.java:425)
> 	at org.hibernate.mapping.PersistentClass.getRecursiveProperty(PersistentClass.java:376)
> 	... 8 more
> A test case is included. Just run model.  Test with the hibernate libraries in the classpath.
> I get the impression this is because of the dot in the generated property name.  Hibernate generates a synthetic property, named after the FQN of the owning entity (with dots replaces by underscores) appended by and underscore and the name of the property.  But properties inside of embedded objects are represented with a dot; when Hibernate later tries to retrieve the same property, it incorrectly interprets this dot as a delimiter, and will look for `_model_MainEntity_embeddedEntity` (in the example above) instead; which it will not find.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list