[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-4529) Support for derived identity (including @MapsId)

Steve Ebersole (JIRA) noreply at atlassian.com
Tue Nov 10 22:33:09 EST 2009


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

Steve Ebersole commented on HHH-4529:
-------------------------------------

Should HHH-4204 be folded in here?

> Support for derived identity (including @MapsId)
> ------------------------------------------------
>
>                 Key: HHH-4529
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4529
>             Project: Hibernate Core
>          Issue Type: Sub-task
>          Components: annotations
>            Reporter: Emmanuel Bernard
>             Fix For: 3.5
>
>
> 2.4.1.1
> IdClass (derived side)
> "The names of the attributes of the id class and the Id attributes of the dependent entity class 
> must correspond as follows: 
> • The Id attribute in the entity class and the corresponding attribute in the id class must 
> have the same name. 
> • If an Id attribute in the entity class is of basic type, the corresponding attribute in the 
> id class must have the same type. 
> • If an Id attribute in the entity is a many-to-one or one-to-one relationship to a parent 
> entity, the corresponding attribute in the id class must be of the same Java type as the 
> id class or embedded id of the parent entity (if the parent entity has a composite pri- 
> mary key) or the type of the Id attribute of the parent entity (if the parent entity has a 
> simple primary key). "
> This basically mean that property names int he entity and idClass must match. Types should be identical unless a @Id @XToOne Parent parent; is present in the entity. In this case the corresponding IdClass property should be of the type of the Parent PK
> "Alternatively, If the dependent entity has a single primary key attribute (i.e., the relationship attribute), the id 
> class specified by the dependent entity must be the same as the primary key class of the parent 
> entity. The Id annotation is applied to the relationship to the parent entity."
> "If the dependent entity uses an embedded id to represent its primary key, the attribute in the embedded 
> id corresponding to the relationship attribute must be of the same type as the primary key of the parent 
> entity and must be designated by the MapsId annotation applied to the relationship attribute. The 
> value element of the MapsId annotation must be used to specify the name of the attribute within the 
> embedded id to which the relationship attribute corresponds.  If the embedded id of the dependent entity 
> is of the same Java type as the primary key of the parent entity, the relationship attribute maps both the 
> relationship to the parent and the primary key of the dependent entity, and in this case the MapsId 
> annotation is specified without the value element."
> class Person
>   @Id PersonPK id;
>   @MapsId("ssnId") @ManyToOne SSN ssn;
>   
>   static class PersonPK {
>   	String name;
>   	String ssnId;
>   }
> }
> class SSN {
> 	@Id String id;
> }
> "If the dependent entity has a single primary key attribute (i.e, the relationship attribute or an attribute 
> that corresponds to the relationship attribute) and the primary key of the parent entity is a simple pri- 
> mary key, the primary key of the dependent entity is a simple primary key of the same type as that of the 
> parent entity (and neither EmbeddedId nor IdClass is specified).  In this case, either (1) the rela- 
> tionship attribute is annotated Id, or (2) a separate Id attribute is specified and the relationship attribute 
> is annotated MapsId (and the value element of the MapsId annotation is not specified)"
> "A primary key attribute that is derived from the identity of a parent entity is mapped by the correspond- 
> ing relationship attribute.  The default mapping for this relationship is as specified in section 2.10.  In 
> the case where a default mapping does not apply or where a default mapping is to be overridden, the 
> JoinColumn or JoinColumns annotation is used on the relationship attribute. 
> If the dependent entity uses an embedded id to represent its primary key, the AttributeOverride 
> annotation may be used to override the default mapping of embedded id attributes that do not corre- 
> spond to the relationship attributes mapping the derived identity.   The embedded id attributes that cor- 
> respond to the relationship are treated by the provider as "read only"—that is, any updates to them on 
> the part of the application are not propagated to the database. 
> If the dependent uses an id class, the Column annotation may be used to override the default mapping 
> of Id attributes that are not relationship attributes. " 
> Examples for all that on page 31

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