Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich hoffe ihr könnt mir weiter helfen! Zur Zeit bin ich in der Einarbeitung von Spring Boot und versuche Daten über ein Rest Interface einem Client zur Verfügung zu stellen. Speziell bin ich auf der Suche nach einem "Best Practice" das Einfügen von Inhalten in Entities mit Abhängigkeiten. Ich habe eine Entity A, die in einer bidirektionalen "OneToMany" relation auf einer andere Entity B verweist und dabei die Eigenschaft "NotNull" hat.
Java:
@Entity
public class A implements Serializable {
@Id
@Column(unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private int idA;
private String valueA;
@OneToMany(mappedBy = "a", fetch = FetchType.EAGER)
private List<B> b;
public A(){};
public A(String valueA, B b){
this.vaueA = valueA;
this.b = new ArrayList();
this.b.add(b);
}
Java:
@Entity
public class B implements Serializable {
@Id
@Column(unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private int idB;
private String valueB;
@ManyToOne
@NotNull
@JoinColumn(name = "A_IDA")
private A a;
public B(){};
public B(String valueB, A a){
this.vaueB = valueB;
this.a = new ArrayList();
this.a.add(a);
}
Dazu zwei Standard "CRUD-Repositories" und ein "RestController"
Java:
@RestController
@RequestMapping("/api")
public class WeldingController {
@Autowired
ARepository aRepository;
@Autowired
BRepository bRepository;
@RequestMapping(method = RequestMethod.POST, value = "/a/")
public ResponseEntity<?> addA(@RequestBody A a) {
return new ResponseEntity<>(aRepository.save(a), HttpStatus.CREATED);
}
@RequestMapping(method = RequestMethod.POST, value = "/b/")
public ResponseEntity<?> addB(@RequestBody B b) {
return new ResponseEntity<>(bRepository.save(b), HttpStatus.CREATED);
}
}
Gerne würde ich jetzt einen neuen Eintrag für A hinzufügen mit:
Wie sieht denn der Fehler aus? Die Exception dürfte den genauen Grund enthalten...
Auf den ersten Blick sieht aber zumindest das JSON-Objekt falsch aus. Das b in deiner Klasse ist eine Liste, in dem JSON aber ein Objekt...
Außerdem müssen in deiner Struktur A und B getrennt erstellt werden.
Ich persönlich versuche Bi-Direktionale Verbindungen zu vermeiden (angelehnt an "Domain Driven Design") (zumindest als schreibend benutzbare, lesend kann man die durchaus haben). Einer der beiden ist dann der, dem die Verbindung gehört, und der kümmert sich um das anlegen des anderen.
In dem Fall würde es vermutlich auf entweder 'A anlegen, und dem dann B's hinzufügen' oder 'B mit einem enthaltenem A anlegen' hinauslaufen, welches genau hängt von der Domäne ab.