【问题标题】:Error table.auto_pk_support when I try to save a value in my table当我尝试在表中保存值时出现错误 table.auto_pk_support
【发布时间】:2017-06-12 19:55:52
【问题描述】:

我还有另一个问题(似乎与:stored procedure 'auto_pk_for_table' not found 相同)但是我将 ID 和“数据库生成”的自动增量和唯一索引与我的自动增量字段放在主键中,见:

public abstract class _DateInfo extends CayenneDataObject {

    public static final String ENDDATETIME_PROPERTY = "enddatetime";
    public static final String STARTDATETIME_PROPERTY = "startdatetime";
    public static final String USER_ID_PROPERTY = "userId";

    public static final String DATEINFOID_PK_COLUMN = "DATEINFOID";
    public static final String USERID_PK_COLUMN = "USERID";

    public void setEnddatetime(Date enddatetime) {
        writeProperty(ENDDATETIME_PROPERTY, enddatetime);
    }
    public Date getEnddatetime() {
        return (Date)readProperty(ENDDATETIME_PROPERTY);
    }

    public void setStartdatetime(Date startdatetime) {
        writeProperty(STARTDATETIME_PROPERTY, startdatetime);
    }
    public Date getStartdatetime() {
        return (Date)readProperty(STARTDATETIME_PROPERTY);
    }

    public void setUserId(int userId) {
        writeProperty(USER_ID_PROPERTY, userId);
    }
    public int getUserId() {
        Object value = readProperty(USER_ID_PROPERTY);
        return (value != null) ? (Integer) value : 0;
    }
}

点击保存按钮时,我尝试保存当地时间:

    Button save = new Button("Save", event -> {
    DateInfoFactory date = CayenneUtil.getContext().newObject(
            DateInfoFactory.class);

        date.setUserId(userIdSelected);
        if (startTime.getValue() != null) {
            LocalTime startDate = startTime.getValue();
            date.setStartdatetime(toDate(startDate));
        }

        date.getObjectContext().commitChanges();

    });
    save.addStyleName(ValoTheme.BUTTON_PRIMARY);

然后,我收到了这个错误:

juin 12, 2017 9:38:32 PM org.apache.cayenne.log.CommonsJdbcEventLogger logQuery
INFOS: LOCK TABLES AUTO_PK_SUPPORT WRITE
juin 12, 2017 9:38:32 PM org.apache.cayenne.log.CommonsJdbcEventLogger logQuery
INFOS: UNLOCK TABLES
juin 12, 2017 9:38:32 PM com.vaadin.server.DefaultErrorHandler doDefault
GRAVE: 
org.apache.cayenne.CayenneRuntimeException: [v.4.0.M5 Feb 24 2017 07:47:55] Commit Exception
..
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'mam.auto_pk_support' doesn't exist

我在 MySQL 中的表是:

我该怎么办?

谢谢,

【问题讨论】:

  • Table 'mam.auto_pk_support' doesn't exist - 检查您在哪里定义表名。看起来不正确。
  • 一切都在 Cayenne 中设置,表名似乎很好。 mam 是我的架构,datainfo 是我的表名

标签: mysql jakarta-ee vaadin apache-cayenne


【解决方案1】:

您可以通过多种方式修复代码。

  1. 你有复合 PK (dateinfoid + userid) 这是故意的吗? 可能您应该使用单列 PK(即仅 dateinfoid),因为它可以唯一标识您的情况下的对象,并可能使您免于其他麻烦。

  2. 如果复合 PK 是有意为之,请确保您在 userIdSelected 中提供非零值,否则 Cayenne 将尝试通过 auto_pk_support 表提供它。

【讨论】:

  • 是的,这是故意的,我不太明白,我想设置一个用户 ID,我设置了 userIdSelected(它是一个 java 变量),所以它不在 Cayenne 中。 userId 已经是 PK 且非 null。我应该如何提供非零值?
  • 我的用户表和卡宴中的日期表之间存在关系(在两个表中都使用用户 ID)
  • 如果你想在表之间建立关系,你应该使用外键而不是主键,所以我认为 userid 不应该是 PK 的一部分。您应该在 Cayenne 中使用 Db\ObjRelatioships,这将允许您使用 Java 对象将对象绑定在一起,而不是它们的 id。至于非零值 - 您确定在userIdSelected 中提供不等于 0 的值吗?您可以阅读如何在 Cayenne 中建立关系here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 2021-01-26
  • 1970-01-01
  • 2015-11-04
  • 2023-04-08
  • 1970-01-01
  • 2022-06-14
相关资源
最近更新 更多