2017-08-03 1 views
-1
@Entity 
public class Categorie { 

    private Long id; 
    private String nom; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public Long getId() { 
     return id; 
    } 
} 

Ce que j'ai besoin est:Comment attribuer une valeur à l'ID autogenrated au printemps JPA

1) id == null (id est pas affecté), la stratégie est incrémentation automatique

2) id ! = null (id est attribué), persisteront l'entité avec la valeur attribuée

Aide s'il vous plaît

+0

On dirait que tu veux rompre l'idée de JPA. Pourquoi? Donnez un exemple concret –

+1

Je ne comprends pas ce que vous essayez d'accomplir. L'appel à merge() ou persist() sera mis à jour ou inséré si id est présent ou non. –

+0

Vous avez une idée étrange des ID autogénérés. L'autogénération ID n'est pas une stratégie de repli; là où il est appliqué, c'est * la * stratégie. Vous ne pouvez pas choisir d'ID pour les entités de types dont les ID sont générés automatiquement. –

Répondre

0

pour que vous devez supprimer l'annotation généré automatiquement. obtenir un identifiant généré automatiquement en appelant nextval de la séquence manuellement à partir de la base de données d'écriture requête native et l'affecter à l'entité

supprimer générateur de séquence de la classe d'entités

@Id 
public Long getId() { 
    return id; 
} 

vérifier si id existe d'autre chercher dans la base de données

if(catagorieObject.getId()==null){ 
catogorieObject.setId(getidFromSeq()); 
} 

obtenir l'ID de séquence en appelant

public Long getidFromSeq(){ 
....... 
String query="select SOME_SEQUENCE.nextVal from dual"; 
..... 
} 
+0

J'ai trouvé cette exception "exception imbriquée est com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: table inconnue 'SOME_SEQUENCE' " –

+0

Homme! 'SOME_SEQUENCE' est le nom de séquence factice que j'ai fourni car vous n'avez pas fourni le nom du générateur de séquence dans votre @GeneratedValue(). remplacez SOME_SEQUENCE par votre séquence créée pour votre entité Categorie –