2017-10-22 1 views
1

Ich habe zwei Modelle:
Erster Klasse:JSON Inhalt für POST-Anfrage @ManyToOne Beziehung in Java Frühling

import javax.persistence.*; 
import java.util.Set; 

@Entity 
public class One { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 
    @OneToMany(mappedBy = "one") 
    private Set<Many> manySet; 

    //Constructor, Getter and Setter 
} 

Klasse Viele:

import javax.persistence.*; 

@Entity 
public class Many { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 
    @ManyToOne 
    @JoinColumn(name = "one_id") 
    private One one; 
    //Constructor, Getter and Setter 
} 

Repository:

import com.hotel.model.Many; 
import org.springframework.data.jpa.repository.JpaRepository; 

public interface ManyRepository extends JpaRepository<Many, Long> { 
} 

Controller-Klasse:

@RestController 
@RequestMapping(value = "many") 
public class ManyController { 
    @Autowired 
    private ManyRepository manyRepository; 

    @GetMapping 
    @ResponseBody 
    public List<Many> getAllMany() { 
     return manyRepository.findAll(); 
    } 

    @PostMapping 
    @ResponseBody 
    public ResponseEntity createMany(@RequestBody Many many) { 
     return new ResponseEntity(manyRepository.save(many), HttpStatus.CREATED); 
    } 
} 

Ich erstellte einen Datensatz mit ID = 1. Aber wenn ich einen Viele Datensatz mit JSON-Daten zu erstellen:

{ 
    "name": "Foo", 
    "one_id": 1 
} 

Ich erhielt viele Datensatz mit one_id ist null
Kann ich nur eine Anforderung mit neuen Viele Datensatz zu erstellen und zu Ein Datensatz hat id = 1 zuweisen? Muss ich 2 Request verwenden: create Many und One zuweisen?

+0

Bitte geben Sie auch den Code ein, der die Daten enthält. –

+0

ich hinzugefügt Repository und Controller-Klasse – tuannv562

Antwort

0

Sie

@PostMapping 
@ResponseBody 
public ResponseEntity createMany(@RequestBody ManyDTO many) { 
    One one = oneRepository(many.getOne_id()); //Get the parent Object 
    Many newMany = new Many(); //Create a new Many object 
    newMany.setName(many.getName()); 
    newMany.setOne(one); // Set the parent relationship 

    ... 

} 

Hinweis muss wie Ihre Methode aktualisieren, so unten sein sollte: die oben Antwort erklärt nur die Art und Weise, wie die Beziehungen der Entität festgelegt werden. Die richtige Service-Schicht sollte tatsächlich aufgerufen werden.

+0

Vielen Dank für Ihre Lösung. Es funktionierte. Muss ich immer die DTO-Klasse verwenden, um die @ManyToOne-Beziehung aufzulösen? – tuannv562

+0

Nicht immer. Wenn Sie keine komplexen Beziehungen festlegen müssen, funktioniert die einfache Entität normalerweise gut. Aber etwas, das der obigen Situation ähnlich ist, benötigt ein DTO, weil das JSON sich etwas von Ihrer tatsächlichen Entität und ihrer Zuordnung unterscheidet. –

1

Um die 'viele' Datensatz mit 'One' assign JSON erstellen wie

{ 
    "name": "Foo", 
    "one":{ 
    "id": 1 
    } 
} 
+0

Es funktioniert nicht – tuannv562

0

Sie 1 Datensatz nur in One und mehrere Rekord in Viele Tabellen bestehen können eine einzelne Anfrage mit, während das unter Repository

import com.hotel.model.One; 
 
import org.springframework.data.jpa.repository.JpaRepository; 
 

 
public interface OneRepository extends JpaRepository<One, Long> { 
 
}

Auf der anderen Seite verwenden Sie können 1 Datensatz in Ein und 1 Datensatz in Viele Tabellen mit dem in Ihrem Beispiel angegebenen JpaRepository persistieren.

Ihre Frage war nicht klar, ob Sie Eins/Viele beibehalten oder Eins/Viele abrufen möchten.

Verwandte Themen