Я могу назвать свои ограничения с JPA?

Это очень просто. используйте re.sub, не используйте replace.

import re
replacements = {r'\bthe\b':'a', 
                r'\bthis\b':'that'}

def replace_all(text, dic):
    for i, j in dic.iteritems():
        text = re.sub(i,j,text)
    return text

replace_all("the cat has this thistle.", replacements)

Он напечатает

a cat has that thistle.
24
задан Pascal Thivent 2 July 2010 в 22:15
поделиться

3 ответа

Начиная с JPA 2.1, можно дать имя внешнему ключу. Например,

@ManyToOne
@JoinColumn(foreignKey=@ForeignKey(name="MY_FANCY_FK_NAME"))
Account account;

Просто убедитесь, что он используется в @JoinColumn. JavaDoc: https://docs.oracle.com/javaee/7/api/javax/persistence/ForeignKey.html#name%28%29

20
ответ дан 28 November 2019 в 23:55
поделиться

Обычно в корпоративном стеке администраторы баз данных не разрешают и не должны разрешать создание системных объектов в своей базе данных. Обычно они запрашивают, чтобы DDL были вставлены вручную, и вы установите ddl-auto приложений Hibernate в режим update , а не в режим create или create-drop. Это идеальный сценарий для большинства брендов, с которыми я работал. Сказав это, вы можете позволить администратору БД решить переименовать ограничения через операторы alter-table, которые Hibernate сгенерирует для вас. Кроме того, имена ограничений первичного ключа также будут управляться администраторами баз данных после передачи им DDL таблицы создания.

Если вы находитесь в роли полного стека, где решаете все, вы можете изменять имя внешнего ключа только в текущих выпусках, используя аннотацию @ForeignKey.

Но я все равно рекомендовал бы ручную вставку операторов DDL в вашу базу данных вместо того, чтобы позволить системному процессу взять на себя управление, поскольку поддержание базы данных и ее фрагментирование упрощается, если принять архитектуру DBA вручную.

Надеюсь, что это отвечает на ваш вопрос.

-1
ответ дан 28 November 2019 в 23:55
поделиться

Hibernate имеет аннотацию @ForeignKey , позволяющую переопределить имя ограничения. Из справочной документации:

2.4.6. Аннотации, связанные с коллекциями

(...)

Ограничения внешнего ключа, в то время как генерируется Hibernate, имеют довольно нечитаемое имя. Вы можете переопределить имя ограничения с использованием @ForeignKey . Обратите внимание, что эта аннотация должна быть размещен на стороне владельца отношения, inverseName ссылка на другую сторону ограничение.

 @Entity
public class Woman {
 ...
 @ManyToMany (каскад = {CascadeType.ALL})
 @ForeignKey (name = "TO_WOMAN_FK", inverseName = "TO_MAN_FK")
public Set  getMens () {
вернуть мужские;
 }
}
изменить таблицу Man_Woman добавить ограничение TO_WOMAN_FK внешний ключ (woman_id) ссылки Женщина
изменить таблицу Man_Woman добавить ограничение TO_MAN_FK внешний ключ (man_id) ссылки Man

Но мне неизвестен стандартный эквивалент JPA.

15
ответ дан 28 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

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