2011-05-01 7 views
0

J'ai deux classes: Dépenses et Catégorie. Une dépense peut avoir plusieurs catégories. Je souhaite mettre en oeuvre l'enregistrement Cascade de toutes les catégories (enfants) avec Dépenses (parent). Mais impossible d'y parvenir.Sur enregistrement des dépenses persistantes, aucune entrée de catégorie n'est créée. S'il vous plaît laissez-moi savoir ce que je fais mal. Voici mes classes:JPA Cascade Persist ne fonctionne pas

@Entity 
@Table(name="EXPENDITURE") 
public class Expenditure { 

    private Long id; 

    @OneToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE}, mappedBy="expenditure") 
    private Set<Category> associatedCategories = new HashSet<Category>(); 

    public Expenditure() { } 

    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="EXPENDITURE_ID") 
    public Long getId() { 
     return id; 
    } 
    public void setId(Long id) { 
     this.id = id; 
    } 

    public void addCategory(Category category) 
    { 
     this.associatedCategories.add(category); 
     category.setExpenditure(this);  
    } 
} 

@Entity 
@Table(name="CATEGORY") 
public class Category { 

    @Id @GeneratedValue 
    @Column(name="CATEGORY_ID") 
    private Long id; 
    private String name; 

    @ManyToOne(targetEntity=Expenditure.class) 
    private Expenditure expenditure; 

    public Category(){} 
    public Category(String name) 
    { 
     this.name = name; 
    } 
    public Category(String name,String description) 
    { 
     this.name = name; 
    } 
    @Column(name="NAME") 
    public String getName() { 
     return name; 
    }  

    public Expenditure getExpenditure() { 
     return expenditure; 
    } 
    public void setExpenditure(Expenditure expenditure) { 
     this.expenditure = expenditure; 
    } 

Répondre

0

Essayez d'ajouter

@ManyToOne(targetEntity=Expenditure.class) 
@JoinColumn(name="parentExpenditureId") // or whatever column name exists in your database schema 
private Expenditure expenditure; 

Et aussi ne pas mélanger les types d'accès sur le terrain et la propriété dans vos classes d'entités.

+0

Merci Satadru pour votre réponse .. J'ai été en mesure de résoudre mon problème en déplaçant l'annotation de l'identifiant au niveau Champ dans la classe Dépenses. Cela a fonctionné sans ajouter le JoinColumn (que je pense est facultatif). Cependant, je ne suis pas sûr de la raison !! – Sumit