[hibernate-dev] Can a transient attribute be overridden to be persistent in a subclass?
Gail Badner
gbadner at redhat.com
Thu Jul 9 12:39:04 EDT 2020
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
>
>
More information about the hibernate-dev
mailing list