私は次のクラスを持っています:
@Entity
@Table(name = "USERS")
public class User {
private Long userID;
@Id
@Column(name = "userID")
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
public Long getUserID() {
return userID;
}
@Column(nullable = false)
private boolean isActive;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false)
private String password;
@Column
@Temporal(TemporalType.TIMESTAMP)
private Calendar lastLoggedIn;
@Column(nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Calendar createdDate;
@Version
private Integer version;
public String getEmail() {
return email;
}
public boolean isActive() {
return isActive;
}
public void setActive(boolean isActive) {
this.isActive = isActive;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Calendar getLastLoggedIn() {
return lastLoggedIn;
}
public void setLastLoggedIn(Calendar lastLoggedIn) {
this.lastLoggedIn = lastLoggedIn;
}
public Calendar getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Calendar createdDate) {
this.createdDate = createdDate;
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
public void setUserID(Long userID) {
this.userID = userID;
}
public User(Long userID, String email, String password, Calendar lastLoggedIn, Calendar createdDate, Integer version) {
}
// No argument constructor
public User() {}
}
アプリケーションを実行すると、Hibernate は構成をロードし、ユーザーのテーブルを作成します。Postgresql を使用しています。これは、生成される SQL ステートメントです (hibernate によってログに記録されます)。
Hibernate: create table USERS
(userID int8 not null, active boolean not null, createdDate timestamp,
email varchar(255), lastLoggedIn timestamp,
password varchar(255), version int4, primary key (userID))
ブール値が非 null として作成され、文字列/タイムスタンプがそうでないのはなぜですか? 電子メールまたはパスワードなしでユーザーを挿入しようとしても例外はありませんが、この生成されたスキーマではそうではありません。Hibernate に null 不可としてフィールドを作成させる別の方法はありますか?