Поля не инициализируются в приложении Spring - PullRequest
0 голосов
/ 19 марта 2020

Вопрос относится только к полям name и lastName;

Существует класс User, от которого наследуется класс Customer. Соответственно, поля родительского класса возвращают null. Конструктор класса Customer имеет super.

USER:

package com.tinychiefdelights.model;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class User {

    public User(){ // Пустой конструктор для Hibernate

    }

    User(String name, String lastName){ // Базовый конструктор для дочерних классов
        this.name = name;
        this.lastName = lastName;
    }

    // Поля
    private String login;

    private String password;

    private String name;

    private String lastName;

    @Override
    public String toString() { // Без этого метода вместо инициализированных строк выводятся символы.
        return "User{" +
                "name='" + name + '\'' +
                ", lastName='" + lastName + '\'' +
                '}';
    }

    // Методы
    public void changePassword(){// Сменить пароль

    }
}

ЗАКАЗЧИК:

package com.tinychiefdelights.model;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.List;

@Getter
@Setter
@Entity
public class Customer extends User {

    public Customer(){ // Пустой конструктор для Hibernate

    }

    public Customer(String name, String lastName){ // Пользовательский конструктор создается,
        super(name, lastName);                     // когда нам нужно создать новый экземпляр,
    }                                              // но у нас еще нет ID.


    // Поля
    private @Id @GeneratedValue Long id;

    private double wallet;

//    private List<Order> orderList; 


    // Методы
    public void depositMoney(){// Внести деньги на счет

        }

    public void withdrawMoney(){// Вывести деньги со счета

        }

    public void makeOrder(){// Сделать заказ

        }
}

В этом классе я передаю данные конструктор класса Customer:

LoadDatabase:

package com.tinychiefdelights;

import com.tinychiefdelights.model.Customer;
import com.tinychiefdelights.repository.CustomerRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@Slf4j
public class LoadDatabase {

    @Bean
    CommandLineRunner initDatabase(CustomerRepository repository) { // Добавляю данные для Customer
        return args -> {
            log.info("Preloading " + repository.save(new Customer("Artur", "Vartanyan")));
            log.info("Preloading " + repository.save(new Customer("Andrey", "Chekmaryov")));
        };
    }

enter image description here

enter image description here

PS Проблема не в LOMBOK, так как ошибка не исчезает при запуске приложения без него

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

В JPA поля родительского объекта по умолчанию не наследуются: в таблице Customer не будет полей логин, пароль, имя, фамилия. JPA и явно укажите @MappedSuperclass в родительской сущности

0 голосов
/ 19 марта 2020

repository.save, кажется, здесь виноват, поскольку, хотя он возвращает правильные значения, кажется, что ничего не сохраняется в базе данных, если бы вы могли опубликовать реализацию того, как данные хранятся в базе данных через код, следующий шаг было бы понять, какая часть неисправна при хранении в базе данных.

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