【问题标题】:Fields are not initialized in a Spring application字段未在 Spring 应用程序中初始化
【发布时间】:2020-06-30 01:07:03
【问题描述】:

该问题仅适用于namelastName 字段;

有一个 User 类继承自 Customer 类。因此,父类的字段返回nullCustomer 类的构造函数有super

用户:

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 类的构造函数:

加载数据库:

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")));
        };
    }

附:问题不在 LOMBOK 中,因为在没有它的应用程序启动时错误不会消失

【问题讨论】:

    标签: java spring hibernate spring-boot gradle


    【解决方案1】:

    JPA 中,默认不继承父实体的字段:Customer 表中将没有字段登录、密码、名字、姓氏。 JPA,并在父实体中明确指定@MappedSuperclass

    【讨论】:

      【解决方案2】:

      repository.save 似乎在这里出了问题,因为虽然它返回了正确的值,但似乎没有任何东西存储在数据库中,如果您可以通过代码发布数据如何存储到数据库中的实现,下一步将其存储在数据库中时会确定它的哪一部分有问题。

      【讨论】:

        猜你喜欢
        • 2014-10-09
        • 2013-07-02
        • 1970-01-01
        • 2012-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-16
        • 1970-01-01
        相关资源
        最近更新 更多