2016-03-10 19 views
6

To działało, zanim przełączyłem się na Boot. Zasadniczo udało mi się POST text/uri-list do zasobu @OneToMany. Zmieniłem swój projekt, aby użyć Boot i gdzieś w procesie, w którym przestał działać. Mogę umieścić tekst/uri-list na końcu @ManyToOne, ale to nie jest to, co chcę zrobić.Spoczynkowa obsługa spakowania sprężyn POST zwraca 204, ale tylko WYBÓR

Po zgłoszeniu POST otrzymuję odpowiedź 204, ale widzę tylko kod SQL na mojej konsoli Wybór i nie wstawianie niczego. EDIT: używam listonosz, ale tu jest curl polecenie, które ma/zwraca taką samą

curl -v -X POST -H "Content-Type: text/uri-list" -d "http://localhost:8080/games/2" http://localhost:8080/developers/1/gameList 

a rejestrator na pomysł:

Hibernate: select developer0_.developer_id as develope1_1_0_, developer0_.name as name2_1_0_ from developer developer0_ where developer0_.developer_id=? 
Hibernate: select game0_.game_id as game_id1_6_0_, game0_.developer_id as develope5_6_0_, game0_.esrb_rating as esrb_rat2_6_0_, game0_.name as name3_6_0_, game0_.release_date as release_4_6_0_, developer1_.developer_id as develope1_1_1_, developer1_.name as name2_1_1_ from game game0_ left outer join developer developer1_ on game0_.developer_id=developer1_.developer_id where game0_.game_id=? 

Oto moje Istotne klasy:

@Entity 
public class Developer { 
    @Id 
    @GeneratedValue 
    @Column(name = "developerId") 
    private Long id; 

    private String name; 

    @OneToMany(mappedBy = "developer", cascade = CascadeType.ALL) 
    private List<Game> gameList; 

Inny:

@Entity 
public class Game { 
    @Id 
    @GeneratedValue 
    @Column(name = "gameId") 
    private Long id; 

    private String name; 

    private Date releaseDate; 

    private ESRBRating esrbRating; 

    @ManyToMany(mappedBy = "gameList", cascade = CascadeType.ALL) 
    private List<User> userList; 

    @ManyToOne 
    @JoinColumn(name = "developerId") 
    private Developer developer; 

Jeśli brakuje mi innych istotnych informacji, daj mi znać, a ja to dostarczę.

+1

Czy można dodać kod, który powinien zostać wstawiony? –

+0

Czy rozwiązałeś już swój problem? Zajmuję się właśnie tym samym problemem, a istniejące odpowiedzi nie były aż tak pomocne. – Smajl

Odpowiedz

1

Hibernate pobiera, wstawia, aktualizuje i usuwa, aż menadżer zostanie opróżniony. Zwykle odbywa się to pod koniec transakcji. Może to oznaczać, że zarządzanie transakcjami nie działa poprawnie.

Ustaw rejestrowanie dla org.springframework.transaction na debugowanie, niż powinieneś zobaczyć kiedy transakcje są otwierane i zamykane.

+0

Dodano "logging.level.org.springframework.transaction = debug" do mojej aplikacji.właściwości i widzę więcej informacji o modyfikowaniu, upuszczaniu i tworzeniu tabel w Hibernate. Ale wynik dla POST jest taki sam, tylko wybiera. Tak jak mówiłem, umieszczanie na drugim punkcie końcowym działa dobrze i widzę wkładkę w dzienniku, tylko nic na odwrót. – jam01

2

Jeśli chcesz je zachować dwukierunkowy wydaje się mieć 2 opcje:

  • Zdjąć mappedBy = "developer" i niech JPA użyć jointable zarządzać relacji jeden-do-wielu.

Developer:

@OneToMany(cascade = CascadeType.ALL) 
@JoinTable(
     name="DeveloperGame", 
     joinColumns = @JoinColumn(name="dev_id"), 
     inverseJoinColumns = @JoinColumn(name="game_id") 
) 
private List<Game> gameList; 

Gra:

@ManyToOne 
@JoinTable(
     name="DeveloperGame", 
     joinColumns = @JoinColumn(name="game_id"), 
     inverseJoinColumns = @JoinColumn(name="dev_id") 
) 
private Developer developer; 
  • Zdjąć mappedBy = "developer" i dodać @JoinColumn jeśli nie chcesz używać jointable (marka masz joincolumn na obie strony relacji o tej samej nazwie kolumny:

Developer:

@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name = "devId") 
private List<Game> gameList; 

Gra:

@ManyToOne 
@JoinColumn(name = "devId") 
private Developer developer; 

Zastanawiam się, czy to jest zgodne z projektem lub jeśli jest to błąd w Spring Danych resztę.

+0

Czy to działa. Mam podobny problem, dołączając do dwóch tabel. Ale rozwiązanie wydaje mi się dokładnie takie samo do mojej implementacji. – Amit