Будьте в спящем режиме последовательность JPA (неидентификатор)

Я предлагаю вам использовать программу установки рецептов и не хранить пробелы в имени каталога. Это легко ...

Перейдите в каталог платформы и запустите команду ниже. Шаг 1:. ./setantenv.sh (для Mac) setantenv.bat (для Windows)

Шаг 2: Откройте каталог установщика Hybris и запустите команду ниже. Примечание. Вы найдете каталог установщика в каталоге hybris ./install.sh - r sap_som_b2b (для Mac) install.bat -r sap_som_b2b (для Windows)

** Скопировано из: https://www.queshub.com/question/how-to-install-sap -hybris-используя-рецепт-инсталлятор -

121
задан Miguel Ping 13 November 2008 в 00:07
поделиться

8 ответов

Ища ответы на эту проблему, я наткнулся на эта ссылка

, кажется, что Hibernate/JPA не может автоматически создать стоимость для Вашего non-id-properties. @GeneratedValue аннотация используется только в сочетании с @Id для создания автонумераций.

@GeneratedValue аннотация просто говорит, в спящем режиме, что база данных генерирует это значение само.

решение (или обходное решение) предложенный на том форуме состоит в том, чтобы создать отдельный объект со сгенерированным идентификатором, чем-то вроде этого:

@Entity
public class GeneralSequenceNumber {
  @Id
  @GeneratedValue(...)
  private Long number;
}

@Entity 
public class MyEntity {
  @Id ..
  private Long id;

  @OneToOne(...)
  private GeneralSequnceNumber myVal;
}
66
ответ дан Vlad Mihalcea 5 November 2019 в 08:12
поделиться

Я работаю в той же ситуации как Вы, и я также не нашел серьезных ответов, если в основном возможно генерировать неидентификационные свойства с JPA или нет.

Мое решение состоит в том, чтобы назвать последовательность с собственным запросом JPA для установки свойства вручную прежде persisiting это.

Это не удовлетворяет, но это работает обходным решением в настоящий момент.

Mario

3
ответ дан 5 November 2019 в 08:12
поделиться

"Я не хочу использовать триггер, или какая-либо другая вещь кроме В спящем режиме сама для генерации значения для моего свойства"

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

0
ответ дан alasdairg 5 November 2019 в 08:12
поделиться

Я был в ситуации как Вы (Последовательность JPA/Hibernate для не @Id поле), и я закончил тем, что создал триггер в своей схеме дб, которые включают уникальный порядковый номер, вставляют. Я просто никогда не заставлял его работать с JPA/Hibernate

-1
ответ дан Frederic Morin 5 November 2019 в 08:12
поделиться

Будьте в спящем режиме определенно поддерживает это. Из документов:

"Сгенерированные свойства являются свойствами, которым генерировала их значения база данных. Как правило, Будьте в спящем режиме, приложения должны были обновить объекты, которые содержат любые свойства, для которых база данных генерация значения. Отмечание свойств, как сгенерировано, однако, позволяет приложению делегировать эту обязанность Быть в спящем режиме. По существу, каждый раз, когда В спящем режиме, выходит, SQL ВСТАВЛЯЮТ или ОБНОВЛЯЮТ для объекта, который определил сгенерированные свойства, это сразу выпускает выбор впоследствии для получения сгенерированных значений".

свойства For, сгенерированные на вставке только, Ваше свойство, отображающее (.hbm.xml), было бы похоже:

<property name="foo" generated="insert"/>

свойства For, сгенерированные на вставке и обновлении, Ваше свойство, отображающее (.hbm.xml), было бы похоже:

<property name="foo" generated="always"/>

, К сожалению, я не знаю JPA, таким образом, я не знаю, представлена ли эта функция через JPA (я подозреваю возможно не)

, С другой стороны, необходимо быть в состоянии исключить свойство из вставок и обновлений, и затем "вручную" назвать session.refresh (obj); после того, как Вы вставили/обновили его для загрузки сгенерированного значения из базы данных.

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

<property name="foo" update="false" insert="false"/>

Снова, я не знаю, представляет ли JPA эти функции Hibernate, но Будьте в спящем режиме, действительно поддерживает их.

14
ответ дан alasdairg 5 November 2019 в 08:12
поделиться

Если у Вас будет столбец с типом UNIQUEIDENTIFIER и поколением по умолчанию, необходимым на вставке, но столбец не является PK

@Generated(GenerationTime.INSERT)
@Column(nullable = false , columnDefinition="UNIQUEIDENTIFIER")
private String uuidValue;

В дб, который Вы будете иметь

CREATE TABLE operation.Table1
(
    Id         INT IDENTITY (1,1)               NOT NULL,
    UuidValue  UNIQUEIDENTIFIER DEFAULT NEWID() NOT NULL)

В этом случае, то Вы не определите генератор для значения, в котором Вы нуждаетесь (Это будет автоматически благодаря columnDefinition="UNIQUEIDENTIFIER"). То же можно попробовать за другие типы столбца

0
ответ дан 24 November 2019 в 01:33
поделиться

Это не то же самое, что использование последовательности. При использовании последовательности вы ничего не вставляете и не обновляете. Вы просто получаете следующее значение последовательности. Похоже, спящий режим его не поддерживает.

0
ответ дан 24 November 2019 в 01:33
поделиться

В качестве продолжения вот как я заставил это работать:

@Override public Long getNextExternalId() {
    BigDecimal seq =
        (BigDecimal)((List)em.createNativeQuery("select col_msd_external_id_seq.nextval from dual").getResultList()).get(0);
    return seq.longValue();
}
7
ответ дан 24 November 2019 в 01:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: