मेरे पास एक और समस्या है (ऐसा लगता है: संग्रहीत प्रक्रिया 'auto_pk_for_table' नहीं मिला) लेकिन मैंने अपने ऑटो-इंक्रीमेंट फ़ील्ड के साथ प्राथमिक कुंजी में आईडी और 'डेटाबेस-जनरेटेड' के लिए ऑटो-इंक्रीमेंट और यूनिक इंडेक्स डाला, देखें:

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 में मेरी तालिका है: यहां छवि विवरण दर्ज करें

मुझे क्या करना चाहिए?

धन्यवाद,

0
Bob 12 जून 2017, 22:55
Table 'mam.auto_pk_support' doesn't exist - जांचें कि आप टेबल के नाम को कहां परिभाषित कर रहे हैं। गलत लगता है।
 – 
petey
12 जून 2017, 23:36
सब कुछ केयेन में सेट है और टेबल के नाम अच्छे लगते हैं। मैम मेरी स्कीमा है, डेटाइन्फो मेरा टेबल नाम है
 – 
Bob
12 जून 2017, 23:45

1 उत्तर

सबसे बढ़िया उत्तर

आप अपने कोड को कैसे ठीक कर सकते हैं इसके कई विकल्प हो सकते हैं।

  1. आपके पास कंपाउंड PK (dateinfoid + userid) है, क्या यह इरादा है? शायद आपको सिंगल कॉलम पीके (यानी केवल dateinfoid) का उपयोग करना चाहिए क्योंकि यह आपके मामले में विशिष्ट रूप से वस्तुओं की पहचान करता है और संभावित रूप से आपको अन्य परेशानियों से बचाएगा।

  2. यदि कंपाउंड पीके जानबूझकर है तो सुनिश्चित करें कि आप userIdSelected में गैर शून्य मान प्रदान करते हैं या अन्यथा केयेन इसे auto_pk_support तालिका के माध्यम से प्रदान करने का प्रयास करेगा।

1
Nikita 13 जून 2017, 17:01
हां, यह जानबूझकर है, मुझे समझ में नहीं आ रहा है, मैं एक उपयोगकर्ता आईडी सेट करना चाहता हूं और मैंने उपयोगकर्ता आईडी चयन किया है (यह एक जावा चर है) इसलिए यह केयेन में नहीं है। userId पहले से ही PK और नॉन नल है। मुझे गैर-शून्य मान कैसे प्रदान करना चाहिए?
 – 
Bob
13 जून 2017, 17:30
मेरे पास मेरी उपयोगकर्ता तालिका और मेरी तिथि तालिका केयेन में संबंध है (दोनों तालिकाओं में उपयोगकर्ता आईडी का उपयोग करके)
 – 
Bob
13 जून 2017, 17:31
1
यदि आप तालिकाओं के बीच संबंध बनाना चाहते हैं तो आपको प्राथमिक कुंजी नहीं विदेशी कुंजी का उपयोग करना चाहिए, इसलिए मुझे लगता है कि उपयोगकर्ता आईडी पीके का हिस्सा नहीं होना चाहिए। और आपको केयेन में Db\ObjRelatioships का उपयोग करना चाहिए जो आपको जावा ऑब्जेक्ट्स का उपयोग ऑब्जेक्ट को एक साथ बांधने की अनुमति देगा, न कि उनकी आईडी। गैर-शून्य मान के लिए - क्या आप सुनिश्चित हैं कि आप userIdSelected में वह मान प्रदान करते हैं जो 0 के बराबर नहीं है? आप Cayenne में संबंध बनाने का तरीका यहां
 – 
Nikita
13 जून 2017, 18:20