нет, я просто хочу создать серию событий - это означает, что несколько событий с одинаковым идентификатором серии, но с другим идентификатором

ользую репозиторий Spring jpa с Hibernate для сохранения объектов в моей базе данных Oracle. Как я могу получить следующее значение моей последовательности базы данных оракула, используя Spring-Hibernate?

Это мой класс Event:

@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;
  }
}

Мне нужно получить следующее значение последовательности один раз для всех рядов событий в обработчике событий.

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);
        }

    }
}

Спасибо за любую помощь ..

 Alan Hay15 сент. 2017 г., 16:17
Почему? Примените правильную аннотацию к@ID Field и Hibernate сделают все это для вас. Смотрите, например:en.wikibooks.org/wiki/Java_Persistence/... tech.zooplus.com/sequences-in-hibernate
 Ron Badur15 сент. 2017 г., 17:43
Мне нужно одинаковое значение для всей серии (серия может содержать 4-5 событий), поэтому я не могу сгенерировать его при созданииEvent организация. Я должен сделать это вcreateSeriesOfEvents метод

Ответы на вопрос(3)

Решение Вопроса

я решил свою проблему в Spring, все, что вам нужно, это добавить собственный запрос в JpaRepository следующим образом:

public interface EventRepository extends JpaRepository<Event, Long> {

 @Query(value = "SELECT seq_name.nextval FROM dual", nativeQuery = 
        true)
 Long getNextSeriesId();
 Ashwani Sharma30 авг. 2018 г., 12:56
Я использую Oracle 12c, но этот запрос ничего не возвращает и вызывает исключение NullPointerException
 ktk30 мар. 2018 г., 19:57
просто нужно убедиться в соответствии запроса для зависимых баз данных.
 tplive22 июн. 2018 г., 09:45
Разве это не сломает вещь - это означает, что мы используем интерфейс, чтобы Spring мог сделать реализацию, и нам не нужно беспокоиться о том, какая база данных лежит в основе ..? В этом случае для переключения БД мне пришлось бы переписать интерфейс ...
 Prakhar Verma27 дек. 2018 г., 16:52
Как это сделать без использования нативного запроса? @ Рон Бадур, я застрял в этом, потому что я не хочу использовать нативный запрос.

Query q = em.createNativeQuery("select seq_name.nextval from dual");
return (Long)q.getSingleResult();
 Ron Badur15 сент. 2017 г., 15:33
откуда я могу получитьem объект?
 StanislavL15 сент. 2017 г., 15:53
em означает EntityManager, и вы можете подключить его автоматически

Аннотируйте свое свойство id так:

@Id
@GeneratedValue(generator = "idSequence")
@SequenceGenerator(schema = "MYORASCHEMA", name = "idSequence", sequenceName = "MY_ORACLE_SEQ_NAME", allocationSize = 1)
@Column(name="ID")
private Long id;
 Ron Badur15 сент. 2017 г., 20:42
Я не хочу, чтобы каждый объект получал свой собственный идентификатор, я хочу дать один и тот же идентификатор серии для всех серий (4-5 объектов типа Event)
 slambeth15 сент. 2017 г., 20:47
У вас есть родительский стол для серии?
 Ron Badur15 сент. 2017 г., 20:49
нет, я просто хочу создать серию событий - это означает, что несколько событий с одинаковым идентификатором серии, но с другим идентификатором

Ваш ответ на вопрос