这个问题只适用于name
和lastName
字段;
有一个继承了Customer
类的User
类。相应地,父类的字段返回null
。Customer
类的构造函数具有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类的构造函数:
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")));
};
}
附注:问题不在LOMBOK中,因为当应用程序在没有它的情况下启动时,错误不会消失
发布于 2020-03-19 14:03:23
在JPA
中,默认情况下不会继承父实体的字段:在Customer
表中将没有字段login、password、first name和last name。JPA
,并在父实体中显式指定@MappedSuperclass
发布于 2020-03-19 06:33:27
repository.save
在这里似乎有问题,因为尽管它返回了正确的值,但似乎没有任何东西存储在数据库中,如果您可以发布如何通过代码将数据存储到数据库中的实现,下一步将是确定在数据库中存储数据时,它的哪一部分是错误的。
https://stackoverflow.com/questions/60748003
复制相似问题