J'utilise Spring jpa repository avec hibernate pour enregistrer des entités sur ma base de données Oracle. Comment puis-je obtenir la prochaine valeur de ma séquence de base de données Oracle en utilisant Spring-Hibernate?
Ceci est ma classe d'événement:
@Entity
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Long seriesId;
private String description;
public Event() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getSeriesId() {
return seriesId;
}
public void setSeriesId(Long seriesId) {
this.seriesId = seriesId;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
Je dois obtenir la valeur suivante de la séquence une fois pour la série d'événements dans le résolveur d'événements.
public class EventResolver {
@Autowired
private EventRepository eventRepository;
public void createSeriesOfEvents(List<EventAPI> eventsToCreate){
Long seriesId = null; // TODO: Get the series id from database sequence
for (EventAPI currEvent : eventsToCreate){
Event newEvent = new Event();
newEvent.setDescription(currEvent.description);
newEvent.setSeriesId(seriesId);
eventRepository.save(newEvent);
}
}
}
Merci pour tout type d'aide ..
Enfin, j'ai résolu mon problème de manière printanière. Tout ce dont vous avez besoin est d'ajouter une requête native dans le référentiel JpaRepository comme ceci:
public interface EventRepository extends JpaRepository<Event, Long> {
@Query(value = "SELECT seq_name.nextval FROM dual", nativeQuery =
true)
Long getNextSeriesId();
Vous pouvez utiliser cette approche dans JPA:
Query q = em.createNativeQuery("select seq_name.nextval from dual");
return (Long)q.getSingleResult();
Annotez votre propriété id comme suit:
@Id
@GeneratedValue(generator = "idSequence")
@SequenceGenerator(schema = "MYORASCHEMA", name = "idSequence", sequenceName = "MY_Oracle_SEQ_NAME", allocationSize = 1)
@Column(name="ID")
private Long id;