persistence@glassfish.java.net

Re: [Fwd: [Issue 486] Problem with abstract _at_Entity and _at_Id in b41]

From: Linda DeMichiel <Linda.Demichiel_at_Sun.COM>
Date: Wed, 05 Apr 2006 19:05:08 -0700

Mike and I have discussed the @Inheritance issue some more, and
concluded that that we should add a clarification to the spec:

  "If the Inheritance annotation is not specified or if no
inheritance type is specified for an entity class hierarchy, the
SINGLE_TABLE mapping strategy is used."

Linda

Sanjeeb Kumar Sahoo wrote:

> Mike, Linda,
>
> Has a decision been made on this? I am hoping the spec to be reworded so
> that @Inheritance becomes optional.
>
> Thanks,
> Sahoo
>
> Marina Vatkina wrote:
>
>> Mike,
>>
>> Are you saying that Java inheritance does not apply to Java Persistence
>> without an extra annotation?
>>
>> thanks,
>> -marina
>>
>> Mike Keith wrote:
>>
>>> Actually that isn't true. We don't say that Lob must be specified but
>>> we have been assuming that it must also be present if a column is a lob.
>>> Same for Embedded. I don't think we even say anything about requiring
>>> Embeddable (except for the EmbeddedId case), but we do. Same for
>>> Inheritance.
>>>
>>> Note that I am not saying that some of things could not be
>>> defaulted, because most of them can and should be, just like
>>> Inheritance could be defaulted. I am just saying that we didn't
>>> specify it to be defaultable.
>>>
>>>
>>>> -----Original Message-----
>>>> From: Linda DeMichiel [mailto:Linda.Demichiel_at_Sun.COM]
>>>> Sent: Wednesday, March 29, 2006 8:51 PM
>>>> To: Mike Keith
>>>> Cc: persistence_at_glassfish.dev.java.net; Sanjeeb Kumar Sahoo; Krogh
>>>> Peter
>>>> W
>>>> Subject: Re: [Fwd: [Issue 486] Problem with abstract @Entity and @Id in
>>>> b41]
>>>>
>>>>
>>>> I see. However, we state in the spec when things are required
>>>> to be specified.
>>>> We don't require that @Inheritance be specified, and otherwise
>>>> always treat normal Java language inheritance as being operative,
>>>> so I think this interpretation is counterintuitive, although I
>>>> can see why confusion might arise.
>>>>
>>>> Linda
>>>>
>>>>
>>>> Mike Keith wrote:
>>>>
>>>>> Actually, I can see exactly why there is confusion. I have always
>>>>> assumed that the @Inheritance annotation is present and in
>>>>
>>>>
>>>> the spec we
>>>>
>>>>> do not use the wording that we use in the other sections that assume
>>>>> a default when the annotation is absent.
>>>>>
>>>>> For example, in every section where the annotation may be defaulted
>>>>> if it is absent we say:
>>>>>
>>>>> "If no <InsertAnnotationHere> annotation is specified, ..."
>>>>> "If the <InsertAnnotationHere> annotation is not specified..."
>>>>> "If the <InsertAnnotationHere> annotation is missing..."
>>>>>
>>>>> We say this for:
>>>>>
>>>>> @Table - "If no Table annotation is specified..."
>>>>> @SecondaryTable - "If no SecondaryTable annotation is specified..."
>>>>> @Column - "If no Column annotation is specified..."
>>>>> @JoinColumn - "If no JoinColumn annotation is specified..."
>>>>> @JoinTable - "If the JoinTable annotation is missing..."
>>>>>
>>>>> And for the two inheritance annotations that *are* optional:
>>>>>
>>>>> @DiscriminatorColumn - "If the DiscriminatorColumn
>>>>
>>>>
>>>> annotation is missing..."
>>>>
>>>>> @DiscriminatorValue - "If the DiscriminatorValue annotation
>>>>
>>>>
>>>> is not specified..."
>>>>
>>>>> But in the Inheritance section, we define the enum, and
>>>>
>>>>
>>>> then talk about
>>>>
>>>>> the *type* (the thing in the annotation element) being
>>>>
>>>>
>>>> specified, not the
>>>>
>>>>> annotation:
>>>>>
>>>>> "public enum InheritanceType
>>>>> { SINGLE_TABLE, JOINED, TABLE_PER_CLASS };
>>>>>
>>>>> Support for the TABLE_PER_CLASS mapping strategy is
>>>>
>>>>
>>>> optional in this release.
>>>>
>>>>> If no inheritance type is specified..."
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Linda DeMichiel [mailto:Linda.Demichiel_at_Sun.COM]
>>>>>> Sent: Wednesday, March 29, 2006 5:20 PM
>>>>>> To: persistence_at_glassfish.dev.java.net
>>>>>> Cc: Mike Keith
>>>>>> Subject: Re: [Fwd: [Issue 486] Problem with abstract @Entity
>>>>>> and @Id in
>>>>>> b41]
>>>>>>
>>>>>>
>>>>>> I don't see how this confusion could arise from the spec.
>>>>>>
>>>>>> Inheritance applies as a result of the Java language "extends"
>>>>>> clause. You don't have to specify @Inheritance for it to
>>>>>> apply.
>>>>>>
>>>>>> (The @Inheritance annotation is not required to be specified
>>>>>> for inheritance. See section 9.1.29, which states that if no
>>>>>> annotation
>>>>>> is present, the single table per class hierarchy inheritance
>>>>>> strategy applies.)
>>>>>>
>>>>>> Linda
>>>>>>
>>>>>>
>>>>>>
>>>>>> Sanjeeb Kumar Sahoo wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>> Hi Mike,
>>>>>>>
>>>>>>> Would you mind having a look at this issue? The latest
>>>>>>
>>>>>>
>>>>>> update suggest
>>>>>>
>>>>>>
>>>>>>> that user must specify @Inheritance in a class to indicate
>>>>
>>>>
>>>> that that
>>>>
>>>>>>> class is the root of the inheritance hierarchy. Why is this
>>>>>>
>>>>>>
>>>>>> the case?
>>>>>>
>>>>>>
>>>>>>> Why can't root be identified by the persistence provider runtime by
>>>>>>> walking up the tree?
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Sahoo
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --------------------------------------------------------------
>>>>>> ----------
>>>>>>
>>>>>>
>>>>>>> Subject:
>>>>>>> [Issue 486] Problem with abstract @Entity and @Id in b41
>>>>>>> From:
>>>>>>> pkrogh_at_dev.java.net
>>>>>>> Date:
>>>>>>> Wed, 29 Mar 2006 15:48:07 +0000
>>>>>>> To:
>>>>>>> issues_at_glassfish.dev.java.net
>>>>>>>
>>>>>>> To:
>>>>>>> issues_at_glassfish.dev.java.net
>>>>>>>
>>>>>>>
>>>>>>> https://glassfish.dev.java.net/issues/show_bug.cgi?id=486
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> User pkrogh changed the following:
>>>>>>>
>>>>>>> What |Old value |New value
>>>>>>>
>>>>>>
>>>>>> ==============================================================
>>>>>> ==================
>>>>>>
>>>>>>
>>>>>>> Issue type|DEFECT |ENHANCEMENT
>>>>>>>
>>>>>>
>>>>>> --------------------------------------------------------------
>>>>>> ------------------
>>>>>>
>>>>>>
>>>>>>> Priority|P3 |P4
>>>>>>>
>>>>>>
>>>>>> --------------------------------------------------------------
>>>>>> ------------------
>>>>>>
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ------- Additional comments from pkrogh_at_dev.java.net Wed
>>>>>>
>>>>>>
>>>>>> Mar 29 15:48:07 +0000 2006 -------
>>>>>>
>>>>>>
>>>>>>> This bug seems to be about the provider determining that
>>>>>>
>>>>>>
>>>>>> inheritance is implied
>>>>>>
>>>>>>
>>>>>>> without specifying the @Inheritance annotation. This is
>>>>>>
>>>>>>
>>>>>> not defined in the
>>>>>>
>>>>>>
>>>>>>> spec, and I believe that it was not the intention of the spec. The
>>>>>>> @Inheritance tag defines that Inheritance is needed.
>>>>>>>
>>>>>>> It seems like a nice usability feature, but it would
>>>>>>
>>>>>>
>>>>>> potentially require the
>>>>>>
>>>>>>
>>>>>>> provider to walk the whole hierarchy instead of just
>>>>>>
>>>>>>
>>>>>> looking for @Inheritance.
>>>>>>
>>>>>>
>>>>>> ------------------------------------------------------------
>>>>
>>>>
>>>> ---------
>>>>
>>>>>>> To unsubscribe, e-mail: issues-unsubscribe_at_glassfish.dev.java.net
>>>>>>> For additional commands, e-mail: issues-help_at_glassfish.dev.java.net
>>>>>>>
>>>>>>
>>>