Аннотации гибернации, укажите значение столбца по умолчанию - PullRequest
3 голосов
/ 05 августа 2010

У меня есть объект домена и аннотируется следующим образом

 @Entity
 @Table(name = "REQUEST")
 public class Request {

  /**
   * Unique id for this request
   */
@Id
@GeneratedValue
@Column(name = "EQ_ID")
private long requestId;
/**
 * 
 */
@Column(name = "EMAIL_ID")
private String emailId;
/**
 * 
 */
@Column(name = "REQUEST_DATE")
private Date requestDate;
/**
*Getters/setters omitted
*/
 }

Столбец Request_date не может быть нулевым, и в соответствии с DDL значением по умолчанию является sysdate (oracle DB). Как мне аннотировать это поле, чтобы, если свойство requestDate имеет значение null, hiberanate автоматически вставляет sysdate.? В настоящее время он выдает ошибку, когда поле имеет значение NULL, что очень очевидно, поскольку оно не может быть NULL в соответствии с ограничениями БД. Как мне это сделать? Один из вариантов - пометить это поле как переходное, и вставки работают нормально. Но минус в том, что я не смогу получить значение (из столбца request_date).

Ответы [ 6 ]

8 голосов
/ 05 августа 2010

Вы можете поместить значение по умолчанию в columnDefinition. Пример будет выглядеть так:

@Column(name = "REQUEST_DATE", nullable = false, columnDefinition = "date default sysdate")
7 голосов
/ 14 августа 2010

Это недостающая особенность в спящих аннотациях. Также есть некоторые обходные пути, как написал Йок. Проблема заключается в том, что обходной путь зависит от поставщика и может работать не для всех БД. В моем случае, Oracle, он не работает и был отмечен как ошибка.

3 голосов
/ 05 августа 2010

Назначить значение по умолчанию для поля:

private Date requestDate = new Date();
1 голос
/ 28 марта 2016

Использование @ColumnDefault (работа для обновления DDL).hibernate.hbm2ddl.auto = update

import org.hibernate.annotations.ColumnDefault;

....

@ColumnDefault(value="'@'")
@Column(name = "TEMP_COLUMN", nullable = false)
public String getTempColumn() {
    return tempColumn;
}

DDL Генерировать:

Alter Table YOUR_TABLE add TEMP_COLUMN varchar2(255) default '@' not null;
0 голосов
/ 09 мая 2014

Я решил присвоить значение переменной следующим образом: private Integer active = 0;

@Entity
@Table(name="products")

public class ServiziTipologia {

     @Id
     @GeneratedValue
     private Integer id;
     private String product;
     private String description;
     private Integer active= 0;
0 голосов
/ 05 августа 2010

Установите в Oracle значение по умолчанию для столбца SYSDATE:

ALTER TABLE APP MODIFY (REQUEST_DATE DEFAULT SYSDATE);

Затем, с точки зрения Hibernate, его можно будет обнулять.

Hibernate будет сохранять значение NULL вбаза данных.Oracle преобразует это в SYSDATE.И все будут счастливы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...