Ошибка при добавлении данных в репозиторий JPA [дубликат]

Как недавно , предложенный в списке рассылки python-dev , модуль runpy может оказаться жизнеспособной альтернативой. Цитата из этого сообщения:

https://docs.python.org/3/library/runpy.html#runpy.run_path

import runpy
file_globals = runpy.run_path("file.py")

Есть тонкие отличия от execfile:

  • run_path всегда создает новое пространство имен. Он выполняет код как модуль, поэтому нет никакой разницы между глобальными и локальными (поэтому есть только аргумент init_globals). Возвращаются глобальные переменные. execfile, выполняемые в текущем пространстве имен или в указанном пространстве имен. Семантика locals и globals, если они были заданы, были схожи с локалями и глобалами внутри определения класса.
  • run_path может не только выполнять файлы, но также яйца и каталоги (см. документация для деталей).

59
задан Bozho 18 November 2010 в 16:27
поделиться

6 ответов

Имела ту же проблему, но с именем табуляции под названием Transaction. Если вы установите

hibernate.globally_quoted_identifiers=true

, тогда будут указаны все идентификаторы базы данных.

Найден мой ответ здесь Специальный символ в имени таблицы hibernate, дающий ошибку

И нашел все доступные настройки здесь https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/appendices/Configurations.html

Could не найти лучшие документы для этого, хотя.

22
ответ дан Rafiek 20 August 2018 в 20:37
поделиться
  • 1
    Как это не значение по умолчанию? – Josh M. 28 June 2018 в 14:21
  • 2
    SQL может стать нечитаемым и использовать ключевые слова, поскольку имена - это плохая практика, которую не следует поощрять. Я думаю...? – Rafiek 29 June 2018 в 09:53
  • 3
    Хорошо. Я предпочел бы зарезервированное зарезервированное слово как имя в течение всего дня по имени, которое не подходит. – Josh M. 29 June 2018 в 15:13
  • 4
    Да, вы могли бы сказать, что абстракция, предоставляемая Hibernate, вызывает беспокойство, а не то, как она технически реализована. Но если вы также используете инструменты, такие как Flyway или Liquibase, то это добавляет сложности, когда вам нужно учитывать, что могут быть зарезервированные слова. Это был мой опыт при переносе схемы. – Rafiek 30 June 2018 в 06:56

Если вы используете, как показано ниже, он должен работать

@Column(name="[order]")
private int order;
14
ответ дан abatishchev 20 August 2018 в 20:37
поделиться
  • 1
    Вы просто делаете это на частном поле не на геттере? – Jake Gaston 2 March 2018 в 17:06
  • 2
    это специфический sqlserver. – Alfredo M 3 July 2018 в 21:49

Нет - изменить имя столбца.

Это зависит от базы данных, и вы просто не можете создать такой столбец. В конце концов hibernate отправляет DDL в базу данных. Если вы не можете создать действительный DDL с этим именем столбца, это означает, что спящий режим также не может быть. Я не думаю, что цитирование решит проблему, даже если вы пишете DDL.

Даже если вам удастся избежать имени - измените его. Он будет работать с этой базой данных, но не будет работать с другим.

2
ответ дан Bozho 20 August 2018 в 20:37
поделиться
  • 1
    Это может работать. См. stackoverflow.com/questions/285775/… . Подождем подтверждения OP. – ewernli 8 February 2010 в 21:18
  • 2
    Это не зависит от базы данных! Вы избегаете его с помощью `и hibernate, переводите его, чтобы исправить стиль цитаты для SQL Dialect – Daniel Käfer 26 June 2017 в 12:24

С Hibernate в качестве поставщика JPA 1.0 вы можете избежать зарезервированного ключевого слова, заключая его в обратные ссылки:

@Column(name="`open`")

Это синтаксис, унаследованный от Hiberate Core:

5,4. Идентификаторы с кодами SQL

Вы можете заставить Hibernate указывать идентификатор в сгенерированном SQL, включив имя таблицы или столбца в обратные ссылки в документе сопоставления. Hibernate будет использовать правильный стиль цитаты для SQL Dialect. Обычно это двойные кавычки, но SQL Server использует скобки, а MySQL использует обратные ссылки.

<class name="LineItem" table="`Line Item`">
    <id name="id" column="`Item Id`"/><generator class="assigned"/></id>
    <property name="itemNumber" column="`Item #`"/>
    ...
</class>

В JPA 2.0 синтаксис стандартизован и становится:

@Column(name="\"open\"")

Ссылки

Связанные вопросы

110
ответ дан Community 20 August 2018 в 20:37
поделиться
  • 1
    И спасибо от меня. Он решил проблему, которую я имел. btw - Ref теперь находится по адресу: docs.jboss.org/hibernate/stable/core/manual/en-US/html/… – Steve 12 November 2013 в 18:54
  • 2
    Я не понимаю, почему я должен это делать, почему Hibernate не делает это автоматически вместо меня ??? – Daniel Hári 4 May 2016 в 22:54
  • 3
    @ DanielHári, может быть, вы найдете мой ответ более «автоматическим»? – Rafiek 25 April 2018 в 11:08
  • 4
    @Rafiek: О да, это идеальное решение, upvoted (y). – Daniel Hári 25 April 2018 в 12:57
  • 5
    Использование @Column(name="[open]") намного красивее :) – Waleed Abdalmajeed 10 June 2018 в 10:36

Некоторые реализации JPA (например, тот, который я использую, DataNucleus) автоматически цитируют идентификатор для вас, поэтому вы никогда не получите этого.

0
ответ дан Neil Stockton 20 August 2018 в 20:37
поделиться
  • 1
    Да, удивился, что Hibernate, похоже, все еще не предлагает такую ​​базовую функцию, учитывая, как люди часто попадают в нее (и кто-то даже запустил вас за то, что смел упомянуть, что это было возможно в другом месте) – Billy Frost 9 July 2018 в 17:04
@Column(name="\"open\"")

Это сработает наверняка, такая же проблема произошла со мной, когда я учил спящий режим.

8
ответ дан wmnitin 20 August 2018 в 20:37
поделиться
Другие вопросы по тегам:

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