Problembeschreibung:Nested @OneToOne -> @OneToMany nicht @OneToMany Kind Objekt bevöl
Ich habe drei @entities der folgenden Beziehung: Customer -> @OneToOne -> Reservierung -> @OneToMany -> Produktbestellung
Wenn ich den Controller aufrufen, um CustomerOrder direkt abzurufen, wird CustomerOrder und das Child-Objekt Reservation abgerufen. Die List<ProductOrder>
bleibt leer.
Wenn ich den Controller anrufen, um die Reservierung direkt zu holen, dann ist die List<ProductOrder>
unter Reservierung vollständig ausgefüllt.
Wenn ich das SQL ausspreche, das Hibernate generiert, um List<ProductOrder>
abzurufen, zieht dieses SQL tatsächlich die entsprechende ProductOrder-Liste aber Spring füllt die Liste nicht.
Details:
Ich habe drei Klassen (Getter und Setter für Kürze halber weggelassen):
Customer:
@Entity
public class CustomerOrder {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(
name="id",referencedColumnName="customerOrderId",insertable=false, updatable=false)
private Reservation reservation;
}
Reservation
@Entity
public class Reservation {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
//Tie a reservation back to a customer order
private Long customerOrderId;
@OneToMany
@JoinColumn(name = "reservationId",
referencedColumnName="id", insertable=false, updatable=false)
private List<ProductOrder> productOrderList = new ArrayList<ProductOrder>();
}
Produkt Bestellen:
@Entity
public class ProductOrder {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private Long customerOrderId;
private Long reservationId;
}
Ich habe auch zwei Endpunkte. direkt eine, die eine Reservierung holen kann, oder eine, die eine Reservierung über einen Customer holen kann:
@RequestMapping(value = "/customer-order/{id}", method = RequestMethod.GET)
public @ResponseBody CustomerOrder findOne(@PathVariable(value="id") Long id) {
return CustomerOrder customerOrder = customerOrderRepository.findOne(id);
}
@RequestMapping(value = "/reservation/{id}", method = RequestMethod.GET)
public @ResponseBody Reservation findOne(@PathVariable(value="id") Long id) {
return reservationService.findOne(id);
}
I 1.3.5.RELEASE Version feder Boot mit MySQL 5.6.23