![](/img/trans.png)
[英]Spring Data jpa (hibernate) nullpointer Exception when adding List of Entities
[英]How to store entities in Spring Data JPA or hibernate
我有這兩個entities
,它們使用OnetoMany
映射相互OnetoMany
。
實體:
@Table(name = "table_A")
public class UserSum{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", nullable = false, unique = true)
private Long id;
private String order_id;
private Date order_date;
@Column(name="email_address")
private String emailAddress;
@OneToMany(mappedBy="userOrderID",fetch=FetchType.EAGER, cascade = CascadeType.ALL)
private Collection<OrderSummary> orderSummary;
// Getter and Setters
}
@Entity
@Table(name = "table_B")
public class AlphaSumm {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", nullable = false, unique = true)
private Long id;
@Column(name="user_orders_id",nullable = true)
private Long userSumID;
@Column(name="total_price")
private String totalPrice;
// Getter and setters
}
要求:我要保存UserSum和AphaSum。
問題:
我正在嘗試這樣的事情
private void save(Order order){
UserSum usersum = new UserSum();
usersum.setOrder_id(order.getOrder_id());
usersum.setOrderSummary(getAllOrdersSummary(order,userOrders));
userOrdersRepository.save(userOrders);
}
private OrderSummary processOrderSummary(Item item,UserOrders userOrders){
OrderSummary orderSummary= new OrderSummary();
// Some code here
orderSummary.setUserOrderID(userOrders.getId());
return orderSummary;
}
注意:UserOrder是實體
但是我在數據庫中得到userOrderID為空。
我的理解是:我在這里顯式設置id orderSummary.setUserOrderID(userOrders.getId());
但此處為null,因為JPA /休眠會在保存數據后立即創建ID,因此我該如何映射它們。 我想到的一種解決方案是這樣的
userOrders = userOrdersRepository.save(userOrders); // to get the id and then perform rest of the operation.
userOrders.setOrderSummary(getAllOrdersSummary(order,userOrders));
userOrdersRepository.save(userOrders);
但我很確定這不是正確的方法。 請提供您的意見,如果我身邊缺少什么,請告訴我。
更新
private List<OrderSummary> getAllOrdersSummary(Order order,UserOrders userOrders ){
List<OrderSummary> orderSummary=new ArrayList<OrderSummary>();
//some logic
orderSummary.add(processOrderSummary(item,userOrders));
return orderSummary;
}
private OrderSum processOrderSum(Item item,UserSum usersum){
OrderSum orderSum= new OrderSum();
orderSum.setOrderItems(item.getName());
orderSum.setTotalPrice(NumberFormating.currencyFormat(item.getPrice()));
orderSum.setQuantity(NumberFormating.numberFormat(item.getQty()));
orderSum.setUserOrderID(usersum.getId());
return orderSum
我認為您需要像這樣更改OrderSummary
實體:
@Table(name = "table_B")
public class OrderSummary {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", nullable = false, unique = true)
private Long id;
@ManyToOne(fetch = FetchType.Lazy)
@JoinColumn(name="id")
private UserOrders userOrders;
@Column(name="total_price")
private String totalPrice;
}
試一試。
並且請在這里看看: pa-joincolumn-vs-mappedby
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.