[hibernate-dev] Can a transient attribute be overridden to be persistent in a subclass?

Gail Badner gbadner at redhat.com
Thu Jul 9 13:35:06 EDT 2020


Thanks, Andrea.

I've created https://hibernate.atlassian.net/browse/HHH-14103.

Since you already see the mapping above, I'll assume you don't need to
review the test case before pushing upstream.

Regards,
Gail

On Thu, Jul 9, 2020 at 10:09 AM andrea boriero <andrea at hibernate.org> wrote:

> Hi Gail,
>
> based on my understanding of Section 2.2  it seems that it should not be
> portable, but I think that it would be nice for Hibernate to support the
> feature.
>
> On Thu, 9 Jul 2020 at 17:40, Gail Badner <gbadner at redhat.com> wrote:
>
>> Hi Christian,
>>
>> It actually does work already.
>>
>> I was just trying to get answers to the questions at the end of my email.
>>
>> > Would overriding a transient attribute be portable? If not, is that
>> something Hibernate would/should support?
>>
>> If the answer is "yes" to either of those, I'll add a test case to the
>> test
>> suite.
>>
>> Thanks,
>> Gail
>>
>> On Thu, Jul 9, 2020 at 12:47 AM Christian Beikov <
>> christian.beikov at gmail.com>
>> wrote:
>>
>> > I agree, this should work. Do you have a JIRA ticket describing what the
>> > problem is?
>> >
>> > Am 09.07.2020 um 02:42 schrieb Gail Badner:
>> > > I *think* the following is valid, but I need confirmation. This
>> mapping
>> > > does seem to work for Hibernate.
>> > >
>> > > A transient attribute, Employee#title, gets overridden as a persistent
>> > > attribute, Editor#title, stored in a column named "e_title".
>> > >
>> > > Writer#title is also transient, but Writer#group uses the same
>> "e_title"
>> > > column as a foreign key. That foreign key value is used to populate
>> > > Writer#title.
>> > >
>> > > @Entity
>> > > @Table(name="Employee")
>> > > @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
>> > > @DiscriminatorColumn(name="department")
>> > > public abstract class Employee {
>> > >      private String name;
>> > >      private String title;
>> > >
>> > >      @Id
>> > >      public String getName() {
>> > >          return name;
>> > >      }
>> > >
>> > >      @Transient
>> > >      public String getTitle() {
>> > >          return title;
>> > >      }
>> > >
>> > >      protected void setName(String name) {
>> > >          this.name = name;
>> > >      }
>> > >
>> > >      protected void setTitle(String title) {
>> > >          this.title = title;
>> > >      }
>> > > }
>> > >
>> > > @Entity
>> > > public class Editor extends Employee {
>> > >      @Column(name = "e_title")
>> > >      public String getTitle() {
>> > >          return super.getTitle();
>> > >      }
>> > >
>> > >      public void setTitle(String title) {
>> > >          super.setTitle( title );
>> > >      }
>> > > }
>> > >
>> > > @Entity
>> > > public class Writer extends Employee {
>> > >      private Group group;
>> > >
>> > >      @ManyToOne(optional = false)
>> > >      @JoinColumn(name = "e_title")
>> > >      public Group getGroup() {
>> > >          return group;
>> > >      }
>> > >
>> > >      public void setGroup(Group group) {
>> > >          this.group = group;
>> > >          setTitle( group.getName() );
>> > >      }
>> > > }
>> > >
>> > > In 4.2, the above mapping worked with Employee#title being persistent,
>> > but
>> > > does not work in 5.3.
>> > >
>> > > Section 2.2 Persistent Fields and Properties of the spec says:
>> > >
>> > > "Entity subclasses may override the property accessor methods.
>> However,
>> > > portable applications must not override the object/relational mapping
>> > > metadata that applies to the persistent fields or properties of entity
>> > > superclasses."
>> > >
>> > > Would overriding a transient attribute be portable? If not, is that
>> > > something Hibernate would/should support?
>> > >
>> > > Thanks,
>> > > Gail
>> > > _______________________________________________
>> > > hibernate-dev mailing list
>> > > hibernate-dev at lists.jboss.org
>> > > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>> > _______________________________________________
>> > hibernate-dev mailing list
>> > hibernate-dev at lists.jboss.org
>> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>> >
>> >
>> _______________________________________________
>> hibernate-dev mailing list
>> hibernate-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>
>>


More information about the hibernate-dev mailing list