mysql - 当我尝试在表中保存值时出现错误 table.auto_pk_support

标签 mysql jakarta-ee vaadin apache-cayenne

我还有另一个问题(似乎与: 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 中的表是:enter image description here

我应该做什么?

谢谢

最佳答案

修复代码的方法有多种。

  1. 您有复合 PK (dateinfoid + userid) 这是有意的吗? 也许您应该使用单列 PK(即仅 dateinfoid),因为它唯一标识您案例中的对象,并且可能会帮助您避免其他麻烦。

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

关于mysql - 当我尝试在表中保存值时出现错误 table.auto_pk_support,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44507710/

相关文章:

java - CDI @Inject 或普通的旧 java ee 5 注释

java - Vaadin 绑定(bind) API 和 Id

java - 根据invent图表中的饼图点击操作创建弹屏

php - Mysql根据点赞数从多个表中选择

mysql - 在 GROUP BY 中使用 LIMIT 以获得每组 N 个结果?

mysql - 使用 MySQL 连接从表中获取值

java - 考虑定义 EntityManagerFactory 类型的 bean Spring boot

java - 如果我们在指定时间内没有收到响应,如何关闭 API 连接

java - JTA EntityManager 不能在存储过程调用中使用 getTransaction()

java - 如何使用 JPAContainer DefaultQueryModifierDelegate 在 vaadin 容器中实现 GROUP BY?