Наследование в сущности - PullRequest
0 голосов
/ 09 июня 2018

как наследование работает в сущности?Я имею в виду, например,

public class Animal {
    private String name;

    //Getters and setters
}


@Entity
public class Dog extends Animal {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
}

Но Hibernate создать таблицу только с идентификатором в базе данных, почему?

Ответы [ 3 ]

0 голосов
/ 09 июня 2018

Вы должны пометить свой суперкласс @MappedSuperClass:

@MappedSuperClass
public class Animal {
    private String name;

    //Getters and setters
}
0 голосов
/ 09 июня 2018

С Java Platform, Enterprise Edition: The Java EE Tutorial:

37.2.3 Суперклассы не-сущностей

Субъекты могут иметь суперклассы не-сущности, и эти суперклассы могут бытьабстрактный или конкретный.Состояние не-сущностных суперклассов является непостоянным, , и любое состояние, унаследованное от не-сущностного суперкласса классом сущностей, является неустойчивым .Не-сущностные суперклассы не могут использоваться в операциях EntityManager или Query. Любые аннотации сопоставлений или отношений в суперклассах, не относящихся к сущности, игнорируются.

Поэтому вам понадобится что-то вроде этого:

@MappedSuperclass
public class Animal {

    @Column
    private String name;

    //Getters and setters
}

Также из вышеупомянутого источника:

37.2.2 Сопоставленные суперклассы

Объекты могут наследовать от суперклассов, которые содержат постоянное состояние иинформация сопоставления, но не сущности. То есть суперкласс не имеет аннотации @Entity и не отображается как сущность провайдером Java Persistence.Эти суперклассы чаще всего используются, когда у вас есть информация о состоянии и отображении, общая для нескольких классов сущностей.

Преобразованные суперклассы определяются путем украшения класса аннотацией javax.persistence.MappedSuperclass

0 голосов
/ 09 июня 2018

Ваш базовый класс не помечен @Entity, поэтому hibernate не знает о его существовании.Наследование в ORM не реализовано как наследование в Java.У вас есть определенные конструкции / аннотации для определения наследования таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...