L'appel de la prochaine valeur d'une séquence en jpa
J'ai une classe mappé comme une Entité à persister dans une base de données. J'ai un champ id comme clé primaire, de sorte que chaque fois que l'objet est conservé à la valeur de l'id est récupérée à partir de la séquence "myClass_pk_seq", un code comme le suivant.
@Entity
@Table(name="myObjects")
public class MyClass {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sequence")
@SequenceGenerator(name="sequence", sequenceName="myClass_pk_seq", allocationSize=1)
@Column(name="myClassId")
private Integer id;
private Integer code;
...
}
J'ai besoin de faire dans le "code" de l'attribut quelque chose de semblable à l'id. J'ai besoin d'avoir une séquence afin que je puisse affecter de code de la prochaine valeur de la séquence (de réserve de valeur dans le cas où l'utilisateur veut réserve, mais sans que la persistance des données). Je veux dire que l'utilisateur voit sur le terrain, si il ne sait pas quoi entrer, il peut pousser un bouton et obtenez à l'écran de la prochaine valeur possible (et il peut ou ne pas l'accepter). Comment puis-je obtenir la valeur suivante de la séquence définie dans la JPA (et incrémenter sa valeur) sans la persistance des données pour un non champ de clé primaire?
Je veux juste avoir une méthode qui appellent nextval sur une séquence associée avec le champ "code", et renvoie une valeur. Quelle est la meilleure façon de le faire en JPA avec des annotations?
Grâce.
ok, j'ai complètement changer ma question donc maintenant ça fait plus de sens.
voir aussi stackoverflow.com/questions/277630/...
OriginalL'auteur Javi | 2010-06-18
Vous devez vous connecter pour publier un commentaire.
Deux solutions sons un peu moche. Peut-être vous pouvez simplement utiliser un générateur de hasard, comme un générateur d'UUID.
En fait, vous n'avez rien dit à propos de l'unicité de la
code
(et les annotations JPA ne le montrent pas, il doit être unique). Pourquoi ne pas vous retourner un random int?Alors pourquoi pas à l'aide d'un générateur aléatoire?
peut-être que ça pourrait faire l'affaire,ou tout de même un statique long de l'attribut et de l'incrémenter par un.
il blesse que JPA ne pas soutenir une telle primitive de base de données standard de construire des séquences. Merci pour l'explication!
OriginalL'auteur Pascal Thivent
Voir une autre question/réponses sur le sujet de l'utilisation de la séquence définie par ailleurs que les champs id. Vous pouvez créer un faux entité à un champ (de type Long id). Connecter à la séquence que vous avez défini dans la base de données. Puis créer un CrudRepository mise en œuvre de cette entité et appeler sa méthode save() avec un vide instance de la faux de l'entité de l'objet que vous avez défini. Hibernate va fonctionner pour vous un "sélectionnez YOUR_SEQ.NEXTVAL de double de la requête".
OriginalL'auteur razvanone