0

I am working a very small application which contains 3 entity classes.

1.Category. 2.Products. 3.User

Relationships:-

a. OneToMany between User and Products.

b. OneToMany and ManyToOne between category and products i.e. a category can have multiple products and multiple products can belong to same category.

Entity Classes are shown below:-

User Entity:-

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String username;
    private String lastname;
    private String email;
    private String password;

    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE},
            fetch = FetchType.EAGER)
    private Set<Products> products;
    //getter and setter
}

Products Entity:-

@Entity
public class Products {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String productname;
    private String cost;

    @ManyToOne(cascade = {CascadeType.MERGE,CascadeType.PERSIST},
            fetch = FetchType.LAZY)
    private Category category;
    //getter and setters
}

Category Entity:-

@Entity
public class Category {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;

    @OneToMany(mappedBy = "category",
            cascade = {CascadeType.PERSIST, CascadeType.MERGE},
            fetch = FetchType.EAGER)
    private List<Products> products;
    //getter and setters
}

Method to merge User with products in data base:-

@GetMapping("/cart")
    public String Cart(Model model){
        model.addAttribute("cart",productsSet);
        System.out.println(productsSet);//At this stage in console I am able to see products added in set
        User user = userRepository.findById(1);//hard coded for now.
        user.setProducts(productsSet);
        userService.saveUserProducts(user);//saveUserProducts() method in shown below.
        productsSet.clear();
        return "mycart";
    }

saveUserProducts() :-

@Override
    @Transactional
    public void saveUserProducts(User user) {
        entityManager.merge(user);
    }

But when I am running the program I see the following exception in console:-

java.lang.IllegalStateException: Multiple representations of the same entity [com.demo.shopping.com.Entity.Products#2] are being merged. Detached: [Products{id=2, productname='p2', cost='200'}]; Detached: [Products{id=2, productname='p2', cost='200'}]

I found an article on stack-overflow but it was not fit in my situation.(java.lang.IllegalStateException: Multiple representations of the same entity with @ManyToMany 3 entities).Except this I don't get any relevant thing.

Please help me to let me know how to deal with this situation. Hope someone will help. Thanks in advance.

double-beep
  • 5,031
  • 17
  • 33
  • 41
Atharva
  • 87
  • 1
  • 9

1 Answers1

0

Remove CascadeType.MERGE user class because in my program I am not adding new products also except this I am creating relation between existing user and products.

Atharva
  • 87
  • 1
  • 9