На самом деле это возможно в JPA, хотя что-то вроде взлома с помощью columnDefinition
свойство @Column
аннотация, например:
@Column(name="Price", columnDefinition="Decimal(10,2) default '100.00'")
Это не возможно в JPA.
Вот то, что Вы можете делать с аннотацией Столбца: http://java.sun.com/javaee/5/docs/api/javax/persistence/Column.html
Вы не можете сделать этого с аннотацией столбца. Я думаю, что единственный путь состоит в том, чтобы установить значение по умолчанию, когда объект создается. Возможно, конструктор по умолчанию был бы правильным местом, чтобы сделать это.
Вы можете сделать следующее:
@Column(name="price")
private double price = 0.0;
Вот! Вы только что использовали ноль в качестве значения по умолчанию.
Обратите внимание, что это будет полезно, если вы обращаетесь к базе данных только из этого приложения. Если другие приложения также используют базу данных, вам следует выполнить эту проверку из базы данных с помощью атрибута аннотации Cameron columnDefinition или другим способом.
@Column(columnDefinition="tinyint(1) default 1")
Я только что проверил проблему. Работает нормально. Спасибо за подсказку.
О комментариях:
@Column(name="price")
private double price = 0.0;
Этот не устанавливает значение столбца по умолчанию в базе данных (конечно).
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 очень помогает в этом.
Ни JPA, ни аннотации Hibernate не поддерживают понятие значения столбца по умолчанию. Чтобы обойти это ограничение, установите все значения по умолчанию непосредственно перед вызовом Hibernate save ()
или update ()
в сеансе. Это максимально близко (за исключением Hibernate, устанавливающего значения по умолчанию) имитирует поведение базы данных, которая устанавливает значения по умолчанию при сохранении строки в таблице.
В отличие от установки значений по умолчанию в классе модели, как предлагает этот альтернативный ответ , этот подход также гарантирует, что запросы критериев, которые используют объект Пример
в качестве прототипа для поиска, будут продолжаться. работать как раньше. Когда вы устанавливаете значение по умолчанию для атрибута, допускающего значение NULL (тот, который имеет непримитивный тип) в классе модели, запрос Hibernate по примеру больше не будет игнорировать связанный столбец, где раньше он игнорировал бы его, потому что он был пустым.