2013-03-17 7 views
5

मेरे पास एक से कई रिश्ते हैं: एक उत्पाद श्रेणी में कई उत्पाद हो सकते हैं।जेपीए कैस्केड पर्सिस्ट त्रुटि

String name = request.getParameter("name"); 
BigDecimal price = new BigDecimal(request.getParameter("price")); 
String description = request.getParameter("description"); 
ProductCategory category = new ProductCategory(); 
category.setCategoryName(request.getParameter("category")); 
Product product = new Product(); 
product.setName(name); 
product.setPrice(price); 
product.setDescription(description); 
product.setCategory(category); 
User user = userManager.findUser("Meow"); 
product.setUser(user); 
productManager.createProduct(product); // productManager is an EJB injected by container 

और इस त्रुटि है:

java.lang.IllegalStateException: तुल्यकालन एक नया दौरान

@Entity 
public class Product implements Serializable { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private String id; 
    @Column(name="ProductName") 
    private String name; 
    private BigDecimal price; 
    private String description; 
    @ManyToOne 
    @JoinColumn(name="UserId") 
    private User user; 
    @ManyToOne 
    @JoinColumn(name="Category") 
    private ProductCategory category; 
    private static final long serialVersionUID = 1L; 

    public Product() { 
     super(); 
    } 
    public String getId() { 
     return this.id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 
    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
    public BigDecimal getPrice() { 
     return this.price; 
    } 

    public void setPrice(BigDecimal price) { 
     this.price = price; 
    } 
    public String getDescription() { 
     return this.description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 
    public User getUser() { 
     return this.user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 
    public ProductCategory getCategory() { 
     return this.category; 
    } 

    public void setCategory(ProductCategory category) { 
     this.category = category; 
    } 
} 


@Entity 
public class ProductCategory { 
    @Id 
    private String categoryName; 
    @OneToMany(cascade= CascadeType.ALL,mappedBy="category") 
    private List<Product> products; 

    public String getCategoryName() { 
     return categoryName; 
    } 

    public void setCategoryName(String productName) { 
     this.categoryName = productName; 
    } 

    public List<Product> getProducts() { 
     return products; 
    } 

    public void setProducts(List<Product> products) { 
     this.products = products; 
    } 

} 

यह जो 2 संस्थाओं का उपयोग सर्वलेट कोड है: यह कोड है ऑब्जेक्ट एक रिश्ते के माध्यम से पाया गया था जिसे कैस्केड चिह्नित नहीं किया गया था

यह त्रुटि क्यों होती है? मैंने फ़ील्ड को "कैस्केड = कैस्केड टाइप" ऑल के रूप में चिह्नित किया!

उत्तर

10

आप एक उत्पाद को सहेजने की कोशिश कर रहे हैं। और यह उत्पाद एक श्रेणी से जुड़ा हुआ है। इसलिए जब जेपीए उत्पाद को बचाता है, तो इसकी श्रेणी पहले से मौजूद होनी चाहिए, या एक कैस्केड कॉन्फ़िगर किया जाना चाहिए ताकि उत्पाद कैस्केड को अपनी श्रेणी को बनाए रखने के लिए जारी रखा जा सके।

लेकिन आपके पास ऐसा कैस्केड नहीं है। आपके पास एक कैस्केड है जो कह रही है कि किसी भी श्रेणी में किए गए किसी भी ऑपरेशन ने उत्पादों की सूची में कैस्केड किया है।

+0

तो मुझे क्या करना चाहिए? यदि मैं कोड को बदलता हूं: @OneToMany (कैस्केड = कैस्केड टाइप। PERSIST, मैप्डबी = "श्रेणी") निजी सूची उत्पाद; यह या तो काम नहीं करता है। यह वही त्रुटि देता है। –

+4

कैस्केड एसोसिएशन के गलत पक्ष पर है। आप जेपीए कह रहे हैं: * जब मैं आपको एक श्रेणी कायम रखने के लिए कहता हूं, तो अपने उत्पादों को भी जारी रखता हूं *। लेकिन आप एक श्रेणी जारी रखने के लिए जेपीए से नहीं पूछते हैं। आप इसे एक उत्पाद जारी रखने के लिए कहते हैं। और कहीं भी आपने कहा है कि जब कोई उत्पाद जारी रहता है, तो इसकी श्रेणी भी जारी रहनी चाहिए। –

+0

तो आपको किस पक्ष में कैस्केड नोटेशन होना चाहिए? जब तक मुझे पता है, कई से एक रिश्ते में, यह हमेशा विपरीत पक्ष पर होता है (इसका मतलब है कि एक तरफ या दूसरी कहानियों से, जिस पक्ष में @OneToMany एनोटेशन शामिल है)। –

संबंधित मुद्दे