我写了一个简单的类:
@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
我不知道如何才能让它发挥作用:/
希望有人可以帮助我。
谢谢, 克里斯蒂安
编辑:
我已经尝试过使用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
查询中添加一些内容,将字符串转换为日期。但是,我不能找到任何东西。
答案 0 :(得分:1)
...唔
一切都是因为一个愚蠢的错误。
SQLInsert应该如下所示:
@SQLInsert(sql = "INSERT INTO battle_log (date_created, some_date, version) VALUES (?,?,?)", check = ResultCheckStyle.NONE)
没有ID
列!!
编辑:
以上版本适用于HSQLDB。当我开始使用postgres时,我又遇到了一些奇怪的错误。 最后我不得不添加ID,但......最重要的是...... 的? ? ? ?值的添加顺序与它们的创建顺序相同[在DDL语句中]。
此外,这里是一个示例项目的链接,其中使用了所描述的所有内容: