2012-12-18 34 views
7

पर कोई प्रभाव नहीं पड़ता है मेरे पास एक प्ले फ्रेमवर्क 2.0.4 एप्लिकेशन है जो डीबी में पंक्तियों को संशोधित करना चाहता है।प्लेफ्रेमवर्क 2 + ईबीन - कच्चे एसक्यूएल अपडेट क्वेरी - डीबी

मैं (संदेशों को पढ़ने) मैं इसे पसंद

नीचे
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 सभी प्रश्नों लॉग इन करने को संशोधित किया है किया स्थिति "खोला" करने के लिए DB में 'कुछ' संदेशों को अद्यतन करने की जरूरत है।

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

यह postgres ऑडिट लॉग

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 डॉक्स है - कहा गया है कोई लेन-देन नहीं है/अगर घोषित नहीं या प्रति पूछताछ यदि आवश्यक है /।

तो ... मैं चाल

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

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

Ebean.execute(update); 

फिर से - एक ही ..

अगला चरण मैंने किया - मैंने

@Transactional(type=TxType.NEVER) 
के साथ विधि को नाराज किया

और

@Transactional(type=TxType.MANDATORY) 

उनमें से कोई भी कोई फर्क नहीं पड़ता।

मैं, Ebean साथ :( किसी मदद कर सकते हैं तो निराश हूँ कृपया

BTW मैं

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

सेट प्ले कंसोल में क्वेरी को देखने के लिए -। अन्य प्रश्नों लॉग इन कर रहे - इस अद्यतन - नहीं

उत्तर

1

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

4

सिर्फ प्रारंभिक अंतरिक्ष को हटा दें।। ..Yes..I यह या तो से विश्वास कर सकता है नहीं ... परिवर्तन "अद्यतन ... करने के लिए" अद्यतन ...

और यह सब thats ...

+0

मैं एक ऐसी ही समस्या थी, और इस एक ने मेरे लिए हल किया! – adis

+0

महान संकेत! बेवकूफ समस्या ... –