2016-03-10 14 views
6

Quindi questo funzionava prima che passassi a Boot. Fondamentalmente sono stato in grado di postare un testo/uri-list a una risorsa @OneToMany bene. Ho cambiato il mio progetto per usare Boot e da qualche parte nel processo ha smesso di funzionare. Posso mettere un testo/uri-list alla fine di @ManyToOne, ma non è quello che voglio fare.Spring Boot Data Rest POST restituisce 204 ma solo SELECTS

Quando invio il POST, ottengo una risposta 204, ma riesco a vedere l'SQL solo sulla mia console Selezionare e non inserire nulla. EDIT: Io uso postino, ma ecco un comando ricciolo che fa/restituisce lo stesso

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

E il logger su IDEA:

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=? 

Qui sono le mie classi rilevanti:

@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; 

Altro:

@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; 

Se mi mancano altre informazioni pertinenti fammelo sapere e me lo fornirò.

+1

È possibile aggiungere il codice da inserire? –

+0

Hai già risolto il tuo problema? Mi sto occupando esattamente dello stesso problema e le risposte esistenti non sono state così utili. – Smajl

risposta

1

Hibernate raccoglie inserimenti, aggiornamenti ed eliminazioni finché il gestore entità non viene svuotato. Questo è normalmente fatto alla fine di una transazione. Quindi potrebbe essere che la gestione delle transazioni non funzioni correttamente.

Impostare la registrazione per org.springframework.transaction su debug, di quanto si dovrebbe vedere quando le transazioni vengono aperte e chiuse.

+0

Aggiunto 'logging.level.org.springframework.transaction = debug' alla mia applicazione.proprietà e sto vedendo più informazioni su Hibernate che altera, rilascia e crea tabelle. Ma l'output per il POST è lo stesso, seleziona solo. Come ho detto, la pubblicazione sull'altro endpoint funziona bene e vedo l'inserto nel registro, ma niente al contrario. – jam01

2

Se si desidera mantenere bidirezionale ti sembra di avere 2 opzioni:

  • Rimuovere il mappedBy = "developer" e lasciare JPA utilizzare un jointable per gestire la relazione uno-a-molti.

Developer:

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

Gioco:

@ManyToOne 
@JoinTable(
     name="DeveloperGame", 
     joinColumns = @JoinColumn(name="game_id"), 
     inverseJoinColumns = @JoinColumn(name="dev_id") 
) 
private Developer developer; 
  • Rimuovere il mappedBy = "developer" e aggiungere un @JoinColumn se non si desidera utilizzare un jointable (farvi avere un joincolumn su entrambi i lati della relazione con lo stesso nome di colonna

Developer:

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

Gioco:

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

mi chiedo se questo è di progettazione o se questo è un bug in primavera dati REST.

+0

Ha funzionato. Sto avendo un problema simile mentre mi unisco a due tavoli. Ma la soluzione qui sembra esattamente la stessa della mia implementazione. – Amit

Problemi correlati