2011-03-16 4 views
1

J'ai défini cette classe Entity, mais elle ne semble pas enregistrer les enfants dans la base de données. Des idées?Hibernate Annotations classe auto-référencée?

@Entity 
public class CategoryModel implements Model<CategoryModel>, Serializable { 

    private static final long serialVersionUID = -4520507504770029807L; 

    @Id 
    @Field(index = Index.UN_TOKENIZED, store = Store.NO) 
    private String id; 

    @NotNull 
    private String name; 

    @ManyToOne 
    private CategoryModel parent; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "parent") 
    private List<CategoryModel> children; 

    public List<CategoryModel> getChildren() { 
     return children; 
    } 

    public String getId() { 
     return id; 
    } 

    public String getName() { 
     return name; 
    } 

    public CategoryModel getParent() { 
     return parent; 
    } 

    public void setChildren(List<CategoryModel> children) { 
     this.children = children; 
    } 

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

    public void setName(String name) { 
     this.name = name; 
    } 

    public void setParent(CategoryModel parent) { 
     this.parent = parent; 
    } 

} 

Un grand merci, Finbarr

Répondre

4

En effet, l'association inverse est jamais persisté; Je peux dire que c'est l'association inverse beacause de la « mappedBy » attribut

3

Ajouter cette méthode à votre classe:

public void addChild(CategoryModel child) { 
    child.setParent(this); 
    getChildren().add(child); 
} 

assurez-vous initialisez également la liste children soit en ligne ou à l'intérieur du constructeur:

private List<CategoryModel> children = new ArrayList<CategoryModel>(); 

Ensuite, essayez ceci:

CategoryModel parent = new CategoryModel(); 
for (int i = 0; i < 10; i++) { 
parent.addChild(new CategoryModel()); 
} 

Il devrait travailler maintenant.

Questions connexes