web-dev-qa-db-fra.com

Obtenir la valeur Next de la séquence avec spring hibernate

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 ..

3
Ron Badur

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();
13
Ron Badur

Vous pouvez utiliser cette approche dans JPA:

Query q = em.createNativeQuery("select seq_name.nextval from dual");
return (Long)q.getSingleResult();
1
Piotr R

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;
0
slambeth