postgresql PlayFramework 2+Ebean-कच्चे Sql अद्यतन क्वेरी-डीबी पर कोई प्रभाव नहीं पड़ता




transactions playframework-2.0 (2)

मुझे लगता है कि आपको एसक्यूएलउपमेंट स्टेटमेंट बनाने के बजाय रॉ एसक्यूएल का उपयोग करना होगा।

मेरे पास एक प्ले फ्रेमवर्क 2.0.4 अनुप्रयोग है जो डीबी में पंक्तियों को संशोधित करना चाहता है।

मुझे डीबी में 'कुछ' संदेशों को अद्यतन करने की स्थिति "खुली" (संदेश पढ़ें) को अपडेट करने की आवश्यकता है I

    String sql = " UPDATE message  SET opened = true, opened_date = now() "
            +" WHERE id_profile_to = :id1 AND id_profile_from = :id2 AND opened IS NOT true";
    SqlUpdate update = Ebean.createSqlUpdate(sql);
    update.setParameter("id1", myProfileId);
    update.setParameter("id2", conversationProfileId);        
    int modifiedCount = update.execute();

मैंने सभी प्रश्नों को लॉग करने के लिए postgresql को संशोधित किया है।

संशोधित संख्या संशोधित पंक्तियों की वास्तविक संख्या है - लेकिन क्वेरी लेन-देन में है। डीबी में क्वेरी के बाद रोलबैक है - इसलिए अद्यतन नहीं किया गया है। मैंने डीबी को एच 2 में बदलने की कोशिश की - एक ही परिणाम के साथ

पोस्टग्रे ऑडिट लॉग से यह क्वेरी है

2012-12-18 00:21:17 CET :  S_1: BEGIN
2012-12-18 00:21:17 CET :  <unnamed>:  UPDATE message  SET opened = true, opened_date = now()  WHERE id_profile_to = $1 AND id_profile_from = $2 AND opened IS NOT true
2012-12-18 00:21:17 CET : parameters: $1 = '1', $2 = '2'
2012-12-18 00:21:17 CET :   S_2: ROLLBACK

..........

खेल ढांचे के दस्तावेज और ईबीआई डॉक्स - बताता है कि कोई लेन-देन नहीं है / यदि प्रति क्वेरी / आवश्यक नहीं घोषित या क्षणिक नहीं है

इसलिए ... मैंने इस चाल को बनाया है

    Ebean.beginTransaction();
    int modifiedCount = update.execute();
    Ebean.commitTransaction();
    Ebean.endTransaction();
    Logger.info("update mod = " + modifiedCount);

लेकिन यह कोई फर्क नहीं पड़ता - एक ही व्यवहार ...

Ebean.execute(update);

फिर - वही ..

अगले कदम मैंने किया था - मैं साथ विधि annontated

@Transactional(type=TxType.NEVER)

तथा

@Transactional(type=TxType.MANDATORY)

उनमें से कोई भी एक अंतर नहीं बना।

मैं ईबीन से बहुत निराश हूं :( कोई भी मदद कर सकता है, कृपया?

Btw। मैं सेट करता हूं

    Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(true);
    Ebean.getServer(null).getAdminLogging().setDebugLazyLoad(true);
    Ebean.getServer(null).getAdminLogging().setLogLevel(LogLevel.SQL);

Play कंसोल को देखने के लिए - अन्य प्रश्न लॉग इन हैं - यह अपडेट - नहीं


बस प्रारंभिक स्थान को हटा दें ... हाँ..मुझे विश्वास नहीं हो रहा था ... "अपडेट ... से" अपडेट करें ...

और बस यही...





ebean