[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-5024) MetadataContext#registerAttribute does not recognize inherited fields

Steve Ebersole (JIRA) noreply at atlassian.com
Sat Jan 7 15:51:11 EST 2012


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

Steve Ebersole commented on HHH-5024:
-------------------------------------

Interestingly enough the attached test case actually passes!  Thats because the MappedSuperclass is also the MappedSuperclass for an entity.  Entities are processed before the embeddables, and are processed correctly.  So by the time we get to the {{CustomerId}} embeddable here the {{AbstractIdentity_}} class has already been populated 

> MetadataContext#registerAttribute does not recognize inherited fields
> ---------------------------------------------------------------------
>
>                 Key: HHH-5024
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5024
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: entity-manager, metamodel
>    Affects Versions: 3.5.0-CR-2, 3.5.1, 4.0.0.Final
>         Environment: Hibernate 3.5.0-CR-2, JPA Modelgen 1.0.0-CR-1
>            Reporter: Adrian Hummel
>            Assignee: Steve Ebersole
>            Priority: Critical
>         Attachments: bugreport.zip
>
>
> The embeddable class {{CustomerId}} (see attached ZIP) inherits from the base class {{AbstractIdentity}} (annotated with {{@MappedSuperclass}}). The metamodel classes for these two classes are correctly generated:
> {code:title=AbstractIdentity_.java|borderStyle=solid}
> import javax.persistence.metamodel.SingularAttribute;
> import javax.persistence.metamodel.StaticMetamodel;
> @StaticMetamodel(AbstractIdentity.class)
> public abstract class AbstractIdentity_ {
> public static volatile SingularAttribute<AbstractIdentity, String> id;
> }
> {code}
> and
> {code:title=CustomerId_.java|borderStyle=solid}
> import javax.persistence.metamodel.StaticMetamodel;
> @StaticMetamodel(CustomerId.class)
> public abstract class CustomerId_ extends AbstractIdentity_ {
> }
> {code}
> When building the entity manager factory, {{MetadataContext#registerAttribute}} (line 378) tries to resolve the field {{CustomerId_.id}} using {{Class#getDeclaredField}}. This results in a {{NoSuchFieldException}} because the field is declared in the super class {{AbstractIdentity_}}.
> Proposed solution: Since all field declarations in the metamodel are public, the {{Class#getField}} method should be used instead.

--
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