2010-01-27 4 views
0

@Entity public class {articleJPA un à plusieurs enfants persistent avec son ID

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column 
private Long id; 
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "item") 
private List<Feature> features= new ArrayList<Feature>(); 

Enfants Entité:

public class Feature{ 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 

private String attribute1; 
private String attribute2; 
private String featureCode; 

    @ManyToOne 
private Item item; 

     ..... 
public String getFeatureCode() { 
    if (item != null) { 
    feature = item.getId() + attribute1 + attribute2; 
    } 
    return feature; 
} 

Vous pouvez voir de mon annotaiton, quand l'article pesist, il va aussi persister ses enfants.

Étant donné que l'ID composite a une très mauvaise réputation et que j'ai vraiment besoin de l'ID de ses parents dans la fonction pour faciliter les requêtes, j'ajoute un featureCode pour ajouter les trois colonnes ensemble.

Mon problème est que l'identifiant de l'article est généré à partir de la base de données. À partir des informations de débogage, je suppose que le même élément d'abord, puis mettre à jour l'élément de la fonction. Cela provoque le résultat null item.getId() null de mon featureCode.

Est-il possible de modifier le comportement de persistance en cascade de type un-à-plusieurs, comme persister d'abord, puis enregistrer les enfants?

Répondre

1

Votre problème est très probablement lié à la génération d'ID IDENTITY (AUTO). Au lieu de cela, utilisez TABLE ou SEQUENCE, alors vos identifiants peuvent être pré-alloués, et vous aurez accès à l'identifiant de l'élément au lieu de seulement après l'insertion.

Questions connexes