3

次のエンティティを取得しました。

@Entity
public class Person {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(columnDefinition="int(11)",nullable=false)
private int id;

@Column(columnDefinition="varchar(255)",nullable=false)
private String name;

@Column(columnDefinition="varchar(255)",nullable=false)
private String vorname;

@Column(columnDefinition="varchar(255)",nullable=false)
private String password;

@Column(columnDefinition="varchar(100)",nullable=false)
private String user;

@Column(columnDefinition="varchar(20)",nullable=false)
private String klasse;

@Temporal(TemporalType.TIMESTAMP)
@Column(name="timestamp",nullable = false,columnDefinition="default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP")
private Date timestamp = new Date();


public Person(){

}
@PreUpdate
public void updatePerson(){
    this.timestamp = new Date();
}


...getters
    ...setters

}

hibernate を呼び出すと、hibernate がテーブルを作成しようとするとエラーが発生します。列のタイムスタンプに名前がないため、エラーが発生したようです。

エラー: HHH000389: 失敗: create table Person (id int(11) not null auto_increment, klasse varchar(20) not null, name varchar(255) not null, password varchar(255) not null, タイムスタンプのデフォルト CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP not null, user varchar(100) not null, vorname varchar(255) not null, primary key (id)) type=MyISAM

休止状態がこれを行う理由を誰かが知っていますか?

4

1 に答える 1

9

名前のない列ではなく、型のない列です。

columnDefinitionHibernateは、列タイプも含むことを期待しています。

@Temporal(TemporalType.TIMESTAMP)
@Column(name="timestamp", nullable = false,
    columnDefinition="TIMESTAMP default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP")
private Date timestamp = new Date();
于 2012-12-03T09:45:45.720 に答える