Я написал простой класс:
@Entity
@Table(name = "battle_log")
@SQLInsert(sql = "INSERT INTO battle_log (id, version, date_created, some_date) VALUES (?,?,?,?)", check = ResultCheckStyle.NONE)
@NamedQueries(value = {
@NamedQuery(name = "BattleLog.findAll",
query = "SELECT a FROM BattleLog a"),
@NamedQuery(name = "BattleLog.findAllBySomeDate",
query = "SELECT a FROM BattleLog a WHERE a.someDate = :someDate")
})
public class BattleLog implements Serializable {
private Long id;
private Integer version;
private Date someDate;
private Date created;
public BattleLog() {
created = new Date();
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Version
@Column(name = "version")
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
@Column(name = "date_created", nullable = false, columnDefinition = "timestamp")
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
@Column(name = "some_date", columnDefinition = "timestamp")
public Date getSomeDate() {
return someDate;
}
public void setSomeDate(Date someDate) {
this.someDate = someDate;
}
}
и простой Bootstrap.groovy
BattleLog blog = new BattleLog(someDate: new Date())
blog.save()
println("should be saved now")
Я делаю это как тестовый проект, чтобы увидеть, как работают разделы Grails и Postgres.
Все хорошо, если я закомментирую код @SQLInsert. Когда он у меня есть, я получаю это исключение:
Caused by: java.sql.SQLException: Wrong data type: java.lang.NumberFormatException: For input string: "2012-02-29 13:48:17.67"
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.setParameter(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.setTimestamp(Unknown Source)
at org.apache.commons.dbcp.DelegatingPreparedStatement.setTimestamp(DelegatingPreparedStatement.java:147)
at org.apache.commons.dbcp.DelegatingPreparedStatement.setTimestamp(DelegatingPreparedStatement.java:147)
... 29 more
Я не уверен, что я могу сделать, чтобы это заработало: /
Надеюсь, кто-нибудь может мне помочь.
Спасибо,
Krystian
EDIT:
Я пытался использовать JodaTime, и после небольшой борьбы с зависимостями я запустил его, однако получил ошибки, подобные приведенной выше.
Я также вернулся к использованию java.util.Date и использовал @Temporal(TemporalType.DATE)
и TIMESTAMP
, но получил ошибку [для даты, аналогичной для отметки времени, но с частью времени]:
Caused by: java.sql.SQLException: Wrong data type: java.lang.NumberFormatException: For input string: "2012-02-29"
Я совершенно уверен, что мне нужно добавить что-то в запрос SQLInsert
, что-то, что преобразует строку в дату. Однако я ничего не могу найти.