В 2017 году JPA по-прежнему имеет только @Column(columnDefinition='...')
, в который вы помещаете буквальное определение SQL столбца. Что довольно негибко и заставляет вас также объявлять другие аспекты, такие как тип, коротко замыкая взгляд реализации JPA по этому вопросу.
Hibernate, хотя, имеет это:
@Column(length = 4096, nullable = false)
@org.hibernate.annotations.ColumnDefault("")
private String description;
Указывает значение ПО УМОЛЧАНИЮ для применения к связанному столбцу с помощью DDL.
Два примечания к этому:
1) Не бойтесь нестандартного поведения. Работая в качестве разработчика JBoss, я видел довольно много процессов спецификации. Спецификация - это в основном базовая линия, которую крупные игроки в данной области готовы взять на себя обязательство поддержать в течение следующего десятилетия или около того. Это верно для безопасности, для обмена сообщениями, ORM не имеет значения (хотя JPA охватывает довольно много). Мой опыт разработчика заключается в том, что в сложных приложениях рано или поздно вам все равно понадобится нестандартный API. И @ColumnDefault
является примером, когда он перевешивает недостатки использования нестандартного решения.
2) Приятно, как все машут инициализацией @PrePersist или членами конструктора. Но это не то же самое. Как насчет массовых обновлений SQL? Как насчет утверждений, которые не устанавливают столбец? DEFAULT
имеет свою роль и не может быть заменена инициализацией члена класса Java.