Spring 嵌套@OneToOne->@OneToMany未填充@OneToMany子对象
问题摘要:Spring 嵌套@OneToOne->@OneToMany未填充@OneToMany子对象,spring,hibernate,spring-data,one-to-many,one-to-one,Spring,Hibernate,Spring Data,One To Many,One To One,问题摘要: @Entity public class CustomerOrder { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @OneToOne(fetch = FetchType.EAGER) @JoinColumn( name="id",referencedColumnName="customerOrderId",insertable=false, updatable=fal
@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 ProductOrder {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private Long customerOrderId;
private Long reservationId;
}
我有三个@实体,其关系如下:
客户订单->@OneToOne->预订->@OneToMany->产品订单
当我调用控制器直接获取CustomerOrder时,CustomerOrder和Reservation子对象被拉入。列表保持为空
如果我调用控制器直接获取预订,那么预订下的列表将被完全填充
当我打印出Hibernate为获取List
而生成的SQL时,该SQL实际上提取了相应的ProductOrder列表,但spring没有填充该列表
详细信息:
@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 ProductOrder {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private Long customerOrderId;
private Long reservationId;
}
我有三个类(为了简洁起见省略了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 ProductOrder {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private Long customerOrderId;
private Long reservationId;
}
预订
@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>();
我还有两个端点。一个可以直接获取预订,或者一个可以通过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);
}
我正在使用spring boot版本1.3.5.RELEASE和MySQL 5.6.23我弄清楚了发生了什么
最初我预订了与CustomerOrder有@OneToMany关系的房间。这意味着我的映射应该这样使用:
@OneToMany
@JoinColumn(
name="customerOrderId",referencedColumnName="id",insertable=false, updatable=false)
private List<Reservation> reservation;
private Long reservationId;
@OneToOne
@JoinColumn(
name="reservationId",referencedColumnName="id",insertable=false, updatable=false)
private Reservation reservation;
呜呜声