Я предлагаю вам использовать программу установки рецептов и не хранить пробелы в имени каталога. Это легко ...
Перейдите в каталог платформы и запустите команду ниже. Шаг 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-используя-рецепт-инсталлятор -
Ища ответы на эту проблему, я наткнулся на эта ссылка
, кажется, что 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; }
Я работаю в той же ситуации как Вы, и я также не нашел серьезных ответов, если в основном возможно генерировать неидентификационные свойства с JPA или нет.
Мое решение состоит в том, чтобы назвать последовательность с собственным запросом JPA для установки свойства вручную прежде persisiting это.
Это не удовлетворяет, но это работает обходным решением в настоящий момент.
Mario
"Я не хочу использовать триггер, или какая-либо другая вещь кроме В спящем режиме сама для генерации значения для моего свойства"
В этом случае, как насчет того, чтобы создать реализацию UserType, который генерирует необходимое значение и конфигурирование метаданных для использования того UserType для персистентности mySequenceVal свойства?
Я был в ситуации как Вы (Последовательность JPA/Hibernate для не @Id поле), и я закончил тем, что создал триггер в своей схеме дб, которые включают уникальный порядковый номер, вставляют. Я просто никогда не заставлял его работать с JPA/Hibernate
Будьте в спящем режиме определенно поддерживает это. Из документов:
"Сгенерированные свойства являются свойствами, которым генерировала их значения база данных. Как правило, Будьте в спящем режиме, приложения должны были обновить объекты, которые содержат любые свойства, для которых база данных генерация значения. Отмечание свойств, как сгенерировано, однако, позволяет приложению делегировать эту обязанность Быть в спящем режиме. По существу, каждый раз, когда В спящем режиме, выходит, 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, но Будьте в спящем режиме, действительно поддерживает их.
Если у Вас будет столбец с типом 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"
). То же можно попробовать за другие типы столбца
Это не то же самое, что использование последовательности. При использовании последовательности вы ничего не вставляете и не обновляете. Вы просто получаете следующее значение последовательности. Похоже, спящий режим его не поддерживает.
В качестве продолжения вот как я заставил это работать:
@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();
}