Как сохранить Список объектов в Postgres в приложении springboot - PullRequest
0 голосов
/ 10 ноября 2019

Я работаю над приложением Springboot. Я пытаюсь сохранить список пользовательских объектов в одном из столбцов, но получаю ОШИБКУ: отношение не существует, исключение для одного столбца

СОТРУДНИК DTO:

public class Employee {

private Integer employeeId;
private String employeeName;

private List<Address> addresses;

public Integer getEmployeeId() {
    return employeeId;
}

public void setEmployeeId(Integer employeeId) {
    this.employeeId = employeeId;
}

public String getEmployeeName() {
    return employeeName;
}

public void setEmployeeName(String employeeName) {
    this.employeeName = employeeName;
}

public List<Address> getAddresses() {
    return addresses;
}

public void setAddresses(List<Address> addresses) {
    this.addresses = addresses;
}



}

АДРЕС DTO:

public class Address {

private String state;
private String country;

public String getState() {
    return state;
}

public void setState(String state) {
    this.state = state;
}

public String getCountry() {
    return country;
}

public void setCountry(String country) {
    this.country = country;
}

public Address(String state, String country) {
    super();
    this.state = state;
    this.country = country;
}

public Address() {
}
}

Служба сервиса:

@Service
public class EmployeeService {

@Autowired
private UserRepository userRepository;

public void persist() {
    Employee employee = new Employee();
    employee.setEmployeeId(1001);
    employee.setEmployeeName("John Doe");
    employee.setAddresses(Arrays.asList(new Address("state_name", "country_name")));

    userRepository.save(employee);
}

}

Тип данных адреса - текстовый в Postgres.

Выполняя мой код, я получаю следующее исключение:org.postgresql.util.PSQLException: ОШИБКА: отношение «employee_address» не существует.

1 Ответ

0 голосов
/ 10 ноября 2019

Расширяет ли UserRepository org.springframework.data.repository.CrudRepository? Если это так ... Spring репозитории не могут работать с простым DTO. Spring репозитории могут сохранять только сущности (класс должен быть помечен @Entity).

Таким образом, вы можете аннотировать Employee и Address классы с помощью @Entity. В этом случае вам также необходимо использовать @OneToMany для адресов Employee #. Вам также необходимо указать свойство @Id.

    @Entity
    public class Employee {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Integer id;
        private Integer employeeId;
        private String employeeName;
        @OneToMany
        private List<Address> addresses;

        // getters + setters + eq/hc
    }

    @Entity
    public class Address {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Integer id;
        private String state;
        private String country;

        // getters + setters + eq/hc
    }

Пример можно найти в следующем руководстве: https://spring.io/guides/gs/accessing-data-jpa/

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