0

我正在尝试将 jscience 物理量存储在我的 grails 项目中。我正在使用休眠和默认值,但我更喜欢具有普遍适用性的东西。我特别关心质量,如果我能有我的方式,我会在域对象中画一条线,如下所示:

MyDomainClass {
  Amount<Mass> weight
}

但这给出了这个错误:

原因:org.hibernate.exception.DataException:无法插入:[project.MyDomainClass] at $Proxy10.saveOrUpdate(Unknown Source) ... 27 更多原因:com.mysql.jdbc.MysqlDataTruncation:数据截断:数据太在 com.mysql.jdbc 的 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3535) 的 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3601) 的第 1 行的“权重”列长。 MysqlIO.sendCommand(MysqlIO.java:1989) 在 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150) 在 com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626) 在 com.mysql.jdbc .PreparedStatement.executeInternal(PreparedStatement.java:2119) 在 com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2415) 在 com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2333) 在 com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2318) 在 org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) ... 还有 28 个

我可以通过将其更改为来修复该错误

def weight

这有什么问题,或者有更好的方法吗?是否有任何数据库解决方案在处理混合单元方面具有优势?谷歌搜索这非常令人沮丧,因为一切都与单元测试有关。

4

1 回答 1

1

您只使用 - 隐藏了错误消息,def weight这使得该字段不持久。由于它没有类型化,Grails 和 Hibernate 不知道如何持久化并忽略它。

我的猜测是它将对象存储为 blob,并且对于默认大小来说太大了,但这可能不是您想要的。查看http://grails.org/doc/latest/guide/GORM.html#customHibernateTypes了解如何将它们映射到您的域类中。

Grails 文档中指向 Hibernate 文档的链接已损坏 - 正确的 url 是http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/mapping.html#mapping-types-custom

jScience 可能已经有自定义的 Hibernate 类型(在发行版中或来自第 3 方) - 您应该查看他们的文档。

于 2012-01-15T15:08:36.677 回答