Проблемы с InheritanceType.JOINED и Spring Data Rest - PullRequest
0 голосов
/ 13 апреля 2020

Мой простой проект Spring Boot содержит класс Payment с двумя подклассами a) Ca sh и b) Card

Код сущности для класса Payment:

//imports omitted    

 @Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name="pay_generic")
public abstract  class Payment {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @CreationTimestamp
    private Timestamp createdAt;
    @UpdateTimestamp
    private Timestamp updatedAt;

    private Double money;
    private String reason;

    @ManyToOne
    @JoinColumn(name = "user_id", referencedColumnName = "id", nullable = false)
    private User user;

первый подкласс имеет следующий код:

import javax.persistence.*;

@Entity
@Table(name="pay_cash")
@PrimaryKeyJoinColumn(name="id")
public class CashPayment extends Payment{

    private Long retailerId;
    private Long terminalId;

, а второй подкласс - следующий код / ​​аннотации

import javax.persistence.*;

@Entity
@Table(name="pay_card")
@PrimaryKeyJoinColumn(name="id")
public class CardPayment extends Payment {

    @ManyToOne
    @JoinColumn(name = "card_id", referencedColumnName = "id", nullable = false)
    private Card card;

Когда я отправляю почтовый запрос на http://localhost: 8080 / платежи с телом

{
    "money": 4,
    "retailerId": 4,
    "user": "/users/8"
}

Я заметил, что данные есть только в таблице родительской базы данных. Только один оператор вставки найден в журналах. Таблица pay_generi c содержит данные, однако в подтаблице pay_ca sh нет

Некоторые SQL, которые могут быть полезны:

CREATE TABLE `pay_generic` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `money` decimal(8,2) NOT NULL,
  `reason` varchar(45) DEFAULT NULL,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_id` int unsigned NOT NULL,
  `type` varchar(45) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `payment_user_fk_idx` (`user_id`),
  CONSTRAINT `payment_user_fk` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
)

CREATE TABLE `pay_cash` (
  `id` int unsigned NOT NULL,
  `retailer_id` int NOT NULL,
  `terminal_id` int DEFAULT '0',
  KEY `fk1_test_idx` (`id`),
  CONSTRAINT `fk1_test` FOREIGN KEY (`id`) REFERENCES `pay_generic` (`id`)
)

Так что вопрос в том, почему дочерняя таблица БД не имеет никаких данных? Я создал проект из весеннего инициала сегодня и БД MySQL.

...