JPA с PostgreSQL - простые отношения - PullRequest
0 голосов
/ 10 октября 2019

Таблицы:

  • pattient (id, name, id_status, ...) -> FK to pattient_status
  • pattient_status (id, description) -> таблица назначения

Все, что мне нужно, это получить pattient_status.description внутри моего pattient.class, потому что мой метод GET требует эту информацию при возврате JSON.

Код:

@Entity
@Table(name="cad_paciente")
public class Paciente {

... (other columns)

@OneToOne
    @JoinColumn(insertable=false, updatable=false, name = "id_status_paciente", referencedColumnName = "id")
    private StatusPaciente status;

public String getStatusPaciente(){
        return status.getStatus();
    }

----
@Entity
@Table(name="cad_status_paciente")
public class StatusPaciente {

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

    @Column(name="ds_status")
    @Size(max=50)
    private String status;

Это правильно перечисляет мою информацию, но по методу POST JPA сохраняет правильно, но возвращает сообщение:

Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: (was java.lang.NullPointerException); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: com.spin.spincare.model.Paciente["statusPaciente"])]

Что мне делать?

Ответы [ 2 ]

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

Это проблема с вашим геттером:

public String getStatusPaciente() {
    return status.getStatus();
}

В вашем вызове POST статус равен нулю, поэтому, когда Джексон использует этот геттер для генерации JSON, он получает исключение нулевого указателя. Обновите его до что-то вроде:

public String getStatusPaciente() {
    if (status == null) {
        return null;
    }
    return status.getStatus();
}
0 голосов
/ 10 октября 2019

Используйте @MapsId. Это приведет к совпадению идентификаторов сущностей. Подробнее здесь .

@Entity
@Table(name="cad_status_paciente")
public class StatusPaciente {

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

    @MapsId
    @OneToOne
    private Paciente paciente;


    @Column(name="ds_status")
    @Size(max=50)
    private String status;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...