внешний ключ ранее сохраненных данных обновляется как ноль при весенней загрузке при сохранении во второй раз - PullRequest
0 голосов
/ 09 апреля 2020

При разработке приложения корзины покупок ниже приведены мои классы сущностей ....

Когда я сохраняю его впервые, сущность пользователя сохраняется должным образом, когда используется тот же запрос, чтобы снова сохранить пользователя, а затем ранее сохраненный иностранный ключ становится пустым, я использую один и тот же запрос, потому что для одного и того же пользователя для одной и той же корзины продукты корзины должны обновляться в несколько строк.

    @Entity
    public class CartProduct implements Serializable {

            /**
             * serialVersionUID.
             */
            private static final long serialVersionUID = 5846027470952949766L;

            /**
             * cartProdcutId.
             */
            @Id
            @GeneratedValue
            @Column(name = "CART_PRODUCT_ID")
            private Integer cartProdcutId;

            /**
             * product.
             */
            @ManyToOne
            @JoinColumn(name = "PRODUCT_ID")
            private Product product;

            /**
             * cart.
             */
            @ManyToOne
            @JoinColumn(name = "CART_ID")
            private Cart cart;

            /**
             * quantity.
             */
            @Min(value = 0, message = "Product Quantity should not be negative")
            @Column(name = "QUANTITY")
            private Integer quantity;

}

второй класс

    @Entity
    public class Cart {
        /**
         * cartId.
         */
        @Id
        @GeneratedValue
        @Column(name = "CART_ID")
        Integer cartId;
        /**
         * cartProducts.
         */
        @OneToMany(cascade = CascadeType.ALL)
        @JoinColumn(name = "CART_ID")
        Set<CartProduct> cartProducts = new HashSet<CartProduct>();
 }

Сохранение пользователя класс

    @Entity
    public class User {

        /**
         * userId.
         */
        @Id
        @GeneratedValue
        @Column(name = "USER_ID")
        Integer userId;
        /**
         * userName.
         */
        @Column(name = "USER_NAME")
        String userName;
        /**
         * cart.
         */
        @OneToOne(cascade = CascadeType.ALL)
        Cart cart;
}    

Класс продукта

    @Entity
    @Inheritance(strategy = InheritanceType.JOINED)
    @NamedQueries({ @NamedQuery(name = "Product.findBook", query = "SELECT p FROM Product p WHERE TYPE(p) = Book"),
            @NamedQuery(name = "Product.findApparal", query = "SELECT p FROM Product p WHERE TYPE(p) = Apparal"),
            @NamedQuery(name = "Product.findByName", query = "SELECT p FROM Product p WHERE p.productName=:name") })
    public class Product {

        /**
         * productId.
         */
        @Id
        @GeneratedValue
        @Column(name = "PRODUCT_ID")
        Integer productId;
        /**
         * productName.
         */
        @Column(name = "PRODUCT_NAME")
        String productName;
        /**
         * price.
         */
        @Column(name = "PRICE")
        Float price;
 }

Сервисный метод для сохранения пользователя

userRepository.save(user);

Json используется в почтальоне для сохранения сущности пользователя:

{
  "cart": {
    "cartId": 1,
    "products": [
      {
        "cartProdcutId": 1,
        "product": {
          "price": 100,
          "productId": 1,
          "productName": "ProdNameOne"
        },
        "quantity": 1
      }
    ]
  },
  "userId": 1,
  "userName": "USERONE"
}

Ниже приведен снимок экрана с базой данных, в котором значение NULL обновлено в первой строке: Снимок экрана с базой данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...