Spring i rest api

0

Witam,
Mam problem z api, gdyż wysyłając zwykłego posta używając Postmana dostaje komunikat o niepowodzeniu. ("could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement"). Po stronie serwera dodatkowo widnieje komunikat, że "pole xyz nie może być null". Zawsze robiłem w taki sam sposób (tworzę interfejs z adnotacją repository, następnie tworzę serwis, a na samym końcu wywołuję metodę z serwisu w kontrolerze). Nie wiem na czym polega mój problem, ale w momencie gdy chcę wyświetlić wysłane dane w konsoli okazuje się, że cały RequestBody jest pusty. Ktoś wie o co może chodzić?

Ps. Jeżeli to ma jakieś znaczenie to korzystam z wbudowanej bazy H2

0

Przecież masz piękny log, że nie może być nullem. Masz gdzieś błąd w logice, albo coś namieszane w kontrolerze. Spróbuj użyć debuggera to będziesz wiedział gdzie :)

0

No ale pokaż kod :)

Informacje, które nam przekazałeś wskazują, że chcesz stworzyć/zmodyfikować obiekt a wartości, które przesyłasz są puste, a nie mogą.

0

Tutaj jest oczywiście kod. Może coś jest pomieszane z relacjami, bo w przypadku prostych POSTÓW wszystko działa poprawnie

@Entity
public class SportpersontableEvent implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="sportpersonEventId")
    private Long sportpersontableeventId;
    
    @ManyToOne(fetch = FetchType.LAZY, targetEntity = Sportpersontable.class)
    @MapsId("sportpersonId")
    @JoinColumn(name="sportperson_id", nullable=false) 
    private Sportpersontable sportperson;
  
    @ManyToOne(fetch = FetchType.LAZY, targetEntity = Dyscyplinetable.class)
    @MapsId("dyscyplineId")
    @JoinColumn(name="dyscypline_id", nullable=false)
    private Dyscyplinetable dyscypline;
//getery i setery
@Repository
public interface SportpersonEventRepo extends CrudRepository<SportpersontableEvent, Long> {
 }
@RestController
@RequestMapping("api/sportpersonEvent")
@CrossOrigin
public class SportpersonEventApi {

    @Autowired
    private SportpersonEventManager sportpersonEventManager;

    @PostMapping
    public void add(@RequestBody SportpersontableEvent sportpersontableEvent) {
        sportpersonEventManager.add(sportpersontableEvent);
    }
@Entity
public class Dyscyplinetable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="dyscyplineId")
    private Long dyscyplineId;
    
    private String name;
    
    private int population;
//getery i setery
}
Entity
public class Sportpersontable implements Serializable{
      
    @Id
    @Column(name="sportpersonId")
    private Long sportpersonId;
    
    @OneToOne
    @MapsId
    private Usertable user;
//getery i setery
}
0

Pewnie próbujesz zapisać wiersz w tabeli z FK wskazujący na nieistniejący klucz w innej tabeli. Na pewno odpowiednie Sportpersontable i Dyscyplinetable istnieją już w bazie? Masz świadomość, co się dzieje pod spodem tj. na poziomie SQL-a?

0

Nie jestem pewny jaki był twój cel, ale dlaczego stosujesz mapowanie @ManyToOne do obiektu, który wcale nie posiada żadnego odniesienia do tego pierwszego ?Polecam używać camelcase w nazewnictwie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1