简体   繁体   English

如何在Spring Data JPA或Hibernate中存储实体

[英]How to store entities in Spring Data JPA or hibernate

I have these 2 entities , which are related to each other using OnetoMany Mapping. 我有这两个entities ,它们使用OnetoMany映射相互OnetoMany

Entity: 实体:

@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

        }

Requirement: i want to save the UserSum and AphaSum. 要求:我要保存UserSum和AphaSum。

Problems: 问题:

i am trying something like this 我正在尝试这样的事情

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;
    }

Note: UserOrder is the entity 注意:UserOrder是实体

but i get userOrderID null in db. 但是我在数据库中得到userOrderID为空。

My understanding is : I am explicitly setting id here orderSummary.setUserOrderID(userOrders.getId()); 我的理解是:我在这里显式设置id orderSummary.setUserOrderID(userOrders.getId());

but its null here because JPA/Hibernate will create the id once it saves the data so how can i map them. 但此处为null,因为JPA /休眠会在保存数据后立即创建ID,因此我该如何映射它们。 One solution i have thought of is something like this 我想到的一种解决方案是这样的

userOrders = userOrdersRepository.save(userOrders);  // to get the id and then perform rest of the operation.
userOrders.setOrderSummary(getAllOrdersSummary(order,userOrders));
userOrdersRepository.save(userOrders);

but am pretty sure this is not the right way to go. 但我很确定这不是正确的方法。 Please provide me your inputs and if something is missing from my side then please let me know. 请提供您的意见,如果我身边缺少什么,请告诉我。

Updated 更新

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

I think you need to change the OrderSummary Entity like this: 我认为您需要像这样更改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;

}

Just give a try. 试一试。

And please have a look here: pa-joincolumn-vs-mappedby 并且请在这里看看: pa-joincolumn-vs-mappedby

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM