Как избежать полиморфизма в запросе суперкласса при использовании JPA и Hibernate - PullRequest
0 голосов
/ 07 декабря 2018

Я использую spring jpa + hibernate для подключения к базе данных Oracle с 2 таблицами: Customers и LegacyCustomers.

Customers расширяет LegacyCustomers, добавляя некоторые дополнительные колонны.

@Entity
@Table(name="Customers")
public class Customers extends LegacyCustomers {
    @Column(name="NewId") private String newId;
    @Column(name="PhoneNumber") private String phoneNumber;
}

@Entity
@Table(name="LegacyCustomers")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class LegacyCustomers {
    @Column(name="OldId") private String oldId;
    @Column(name="Name") private String name;
    @Column(name="Address") private String address;
} 

Однако это совершенно разные таблицы.Я ищу способ выражения отношений в java, но избегаю полиморфизма, который hibernate создает при запросе к таблице суперкласса (LegacyCustomers).Как я могу сказать hibernate использовать только столбцы из суперкласса, когда я запрашиваю LegacyCustomers?

К сожалению, аннотация @Polymorphism, предложенная здесь , не помогает.

Спасибо за помощь

1 Ответ

0 голосов
/ 14 декабря 2018

Чтобы достичь своей цели, вам нужно использовать аннотацию @MappedSuperclass вместо нового класса BaseCustomers, который содержит общие свойства:

@MappedSuperclass
public class BaseCustomers {
    @Column(name="OldId") private String oldId;
    @Column(name="Name") private String name;
    @Column(name="Address") private String address;
}

После этого LegacyCustomers просто расширяет BaseCustomers и добавляет только аннотацию @Entity, поскольку BaseCustomers не рассматривается как объект:

@Entity
@Table(name="LegacyCustomers")
public class LegacyCustomers extends BaseCustomers {

}

И объект Customers делает то же самое:

@Entity
@Table(name="Customers")
public class Customers extends BaseCustomers {
    @Column(name="NewId") private String newId;
    @Column(name="PhoneNumber") private String phoneNumber;
}

Вот и все.

...