我正在尝试将类存储到MySql数据库。该类声明如下:
@DatabaseTable(tableName = "categories")
public class CategoryItem {
@DatabaseField(generatedId = true)
protected long mUniqueId;
@DatabaseField
private String mCategoryDisplayName;
@DatabaseField
private int mItemsCount; // How many items are from this category
@DatabaseField(foreign = true, foreignAutoRefresh = true, maxForeignAutoRefreshLevel = 5)
private CategoryItem mParent;
protected CategoryItem() {}
当尝试将此类存储到MySql数据库(在openshift中)时,我收到以下异常:
java.sql.SQLException: generated-id key was not set by the update call
com.j256.ormlite.stmt.mapped.MappedCreate.insert(MappedCreate.java:115)
com.j256.ormlite.stmt.StatementExecutor.create(StatementExecutor.java:438)
com.j256.ormlite.dao.BaseDaoImpl.create(BaseDaoImpl.java:308)
com.kanooli.common.itemslist.ORMLite.ORMLiteItemsAdapter.addCategory(ORMLiteItemsAdapter.java:51)
com.kanooli.common.itemslist.Update.updateDataBase(Updater.java:85)
kanooliserver.mysql.DbUpdater.doGet(DbUpdater.java:65)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
当我查看源代码时,这就是打印出来的地方:
if (key == null) {
// may never happen but let's be careful out there
throw new SQLException("generated-id key was not set by the update call");
}
这是ORMLite中的错误吗?
答案 0 :(得分:1)
java.sql.SQLException:更新调用未设置generated-id键
这很奇怪,不应该发生。我不相信这是ORMLite中的错误。我相信这表明您在创建数据库表的架构与正在插入表中的实体之间存在不匹配。请验证创建MySQL表的模式实际上是否已将id字段定义为:
`id` INTEGER AUTO_INCREMENT
如果您创建了表而没有 AUTO_INCREMENT
,然后尝试将一个实体插入到思想的表中,那么它就是generatedId = true
导致你见过的例外。
我已经为这个特定问题添加了一些检查,一些测试可以查找它,以及更好的消息传递。请参阅这些签到: