Установка значений по умолчанию для столбцов в JPA

232
задан Manuel Drieschmanns 7 November 2017 в 02:30
поделиться

7 ответов

На самом деле это возможно в JPA, хотя что-то вроде взлома с помощью columnDefinition свойство @Column аннотация, например:

@Column(name="Price", columnDefinition="Decimal(10,2) default '100.00'")
224
ответ дан Jasper 23 November 2019 в 03:34
поделиться

Это не возможно в JPA.

Вот то, что Вы можете делать с аннотацией Столбца: http://java.sun.com/javaee/5/docs/api/javax/persistence/Column.html

0
ответ дан PEELY 23 November 2019 в 03:34
поделиться

Вы не можете сделать этого с аннотацией столбца. Я думаю, что единственный путь состоит в том, чтобы установить значение по умолчанию, когда объект создается. Возможно, конструктор по умолчанию был бы правильным местом, чтобы сделать это.

6
ответ дан Piotr Nowicki 23 November 2019 в 03:34
поделиться

Вы можете сделать следующее:

@Column(name="price")
private double price = 0.0;

Вот! Вы только что использовали ноль в качестве значения по умолчанию.

Обратите внимание, что это будет полезно, если вы обращаетесь к базе данных только из этого приложения. Если другие приложения также используют базу данных, вам следует выполнить эту проверку из базы данных с помощью атрибута аннотации Cameron columnDefinition или другим способом.

298
ответ дан 23 November 2019 в 03:34
поделиться
@Column(columnDefinition="tinyint(1) default 1")

Я только что проверил проблему. Работает нормально. Спасибо за подсказку.


О комментариях:

@Column(name="price") 
private double price = 0.0;

Этот не устанавливает значение столбца по умолчанию в базе данных (конечно).

8
ответ дан 23 November 2019 в 03:34
поделиться

JPA не поддерживает это, и было бы полезно, если бы это было так. Использование columnDefinition зависит от БД и во многих случаях неприемлемо. установки значения по умолчанию в классе недостаточно, когда вы извлекаете запись, имеющую нулевые значения (что обычно происходит при повторном запуске старых тестов DBUnit). Вот что я делаю:

public class MyObject
{
    int attrib = 0;

    /** Default is 0 */
    @Column ( nullable = true )
    public int getAttrib()

    /** Falls to default = 0 when null */
    public void setAttrib ( Integer attrib ) {
       this.attrib = attrib == null ? 0 : attrib;
    }
}

Автоматическая упаковка Java очень помогает в этом.

13
ответ дан 23 November 2019 в 03:34
поделиться

Ни JPA, ни аннотации Hibernate не поддерживают понятие значения столбца по умолчанию. Чтобы обойти это ограничение, установите все значения по умолчанию непосредственно перед вызовом Hibernate save () или update () в сеансе. Это максимально близко (за исключением Hibernate, устанавливающего значения по умолчанию) имитирует поведение базы данных, которая устанавливает значения по умолчанию при сохранении строки в таблице.

В отличие от установки значений по умолчанию в классе модели, как предлагает этот альтернативный ответ , этот подход также гарантирует, что запросы критериев, которые используют объект Пример в качестве прототипа для поиска, будут продолжаться. работать как раньше. Когда вы устанавливаете значение по умолчанию для атрибута, допускающего значение NULL (тот, который имеет непримитивный тип) в классе модели, запрос Hibernate по примеру больше не будет игнорировать связанный столбец, где раньше он игнорировал бы его, потому что он был пустым.

2
ответ дан 23 November 2019 в 03:34
поделиться
Другие вопросы по тегам:

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