更新调用未设置ORMLite throws的generated-id键

时间:2013-12-28 23:51:16

标签: java mysql database ormlite

我正在尝试将类存储到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中的错误吗?

1 个答案:

答案 0 :(得分:1)

  

java.sql.SQLException:更新调用未设置generated-id键

这很奇怪,不应该发生。我不相信这是ORMLite中的错误。我相信这表明您在创建数据库表的架构与正在插入表中的实体之间存在不匹配。请验证创建MySQL表的模式实际上是否已将id字段定义为:

`id` INTEGER AUTO_INCREMENT

如果您创建了表而没有 AUTO_INCREMENT,然后尝试将一个实体插入到思想的表中,那么它就是generatedId = true导致你见过的例外。

我已经为这个特定问题添加了一些检查,一些测试可以查找它,以及更好的消息传递。请参阅这些签到: