【发布时间】:2016-06-07 01:53:50
【问题描述】:
问题总结:
我有三个具有以下关系的@entities: CustomerOrder -> @OneToOne -> 预订 -> @OneToMany -> ProductOrder。
当我调用控制器直接获取 CustomerOrder 时,会拉取 CustomerOrder 和 Reservation 子对象。 List<ProductOrder> 仍然为空。
如果我直接调用控制器去获取Reservation,那么Reservation下的List<ProductOrder>就被填满了。
当我打印出 Hibernate 生成的用于获取 List<ProductOrder> 的 SQL 时,该 SQL 实际上会拉取适当的 ProductOrder 列表,但 spring 并未填充该列表。
详情:
我有三个类(为简洁起见,省略了 Getter 和 setter):
客户订单:
@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;
}
预订
@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>();
}
产品订单:
@Entity
public class ProductOrder {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private Long customerOrderId;
private Long reservationId;
}
我也有两个端点。一种可以直接获取预订,或者一种可以通过 customerOrder 获取预订:
@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);
}
我正在使用带有 MySQL 5.6.23 的 spring-boot 版本 1.3.5.RELEASE
【问题讨论】:
标签: spring hibernate spring-data one-to-many one-to-one