Mysql 错误table.auto_pk_尝试在表中保存值时支持

Mysql 错误table.auto_pk_尝试在表中保存值时支持,mysql,jakarta-ee,vaadin,apache-cayenne,Mysql,Jakarta Ee,Vaadin,Apache Cayenne,我还有另一个问题(似乎与:)但我将ID和“数据库生成”的自动增量和唯一索引与我的自动增量字段放在主键中,请参见: public abstract class _DateInfo extends CayenneDataObject { public static final String ENDDATETIME_PROPERTY = "enddatetime"; public static final String STARTDATETIME_PROPERTY

我还有另一个问题(似乎与:)但我将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中的表是:

我该怎么办


谢谢,

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

  • 您有复合主键(
    dateinfoid
    +
    userid
    ),这是有意的吗? 可能您应该使用单列PK(即仅
    dateinfoid
    ),因为它唯一地标识您案例中的对象,并且可能会为您避免其他问题

  • 如果复合PK是有意的,则确保在
    userIdSelected
    中提供非零值,否则Cayenne将尝试通过
    auto\u PK\u support
    表提供该值


  • 表“主自动主键支持”不存在
    -检查定义表名的位置。看起来是正确的。一切都在Cayenne中设置,表名看起来不错。mam是我的模式,datainfo是我的表名是的,这是有意的,我不确定是否理解,我想设置一个用户Id,我设置了userIdSelected(它是一个java变量),所以它不在Cayenne中。用户ID已为PK且非空。我应该如何提供非零值?我在cayenne中的用户表和日期表之间有一个关系(在两个表中都使用userid)。如果你想在表之间建立关系,你应该使用外键而不是主键,所以我认为userid不应该是PK的一部分。您应该在Cayenne中使用Db\objrelationships,这将允许您使用Java对象将对象绑定在一起,而不是它们的ID。至于非零值-您确定在
    userIdSelected
    中提供的值不等于0吗?您可以阅读如何在Cayenne中创建关系