2013-08-14 3 views
0

최대 절전 모드 트랜잭션에 문제가 있습니다. 실행 후 테이블에 값이 없으며 전혀 업데이트되지 않습니다. 다른 모든 업데이트가 제대로 작동합니다.최대 절전 모드 : 테이블이 업데이트되지 않습니다.

public class LastDownloadedMessage { 
    Integer id; 
    private String lastDownloadedMessageUid; 
    private String lastUidNext; 
    private String folder; 
    private String cred; 

    //GETTERS AND SETTERS HERE 

    public LastDownloadedMessage() { 
     super(); 
    } 
    public LastDownloadedMessage(String lastDownloadedMessageUid, 
      String lastUidNext) { 
     super(); 
     this.lastDownloadedMessageUid = lastDownloadedMessageUid; 
     this.lastUidNext = lastUidNext; 
    } 
} 

이 업데이트를하고있는 기능입니다 :

여기 이것은 POJO 객체 인 매핑을

<class name="LastDownloadedMessage" table="t_imap_lastmsguid"> 
    <id name="id" column="id" ><generator class="increment"/></id> 
    <property name="lastDownloadedMessageUid"><column name="last_msg_uid" /></property> 
    <property name="lastUidNext"><column name="next_msg_uid" /></property> 
    <property name="folder"><column name="folder_name" /></property> 
    <property name="cred"><column name="credential" /></property> 
</class> 

을합니다.

Session ssn=HibernateSessionFactory.openSession(); 
    Transaction txn = ssn.beginTransaction(); 
    Query query = ssn.createQuery("update LastDownloadedMessage e set e.lastDownloadedMessageUid = :luid , e.lastUidNext = :nextUid where e.folder =:folder and e.cred = :cred"); 
    query.setParameter("luid",last_downloaded_msg_uid); 
    query.setParameter("nextUid", uid_next); 
    query.setParameter("folder", folder); 
    query.setParameter("cred", credential); 
    int result = query.executeUpate(); 
    txn.commit(); 
    ssn.flush(); 
    ssn.close(); 

오류없이 제대로 실행되는 것으로 나타납니다. 무엇이 문제 일 수 있습니까?

+0

'결과'의 가치는 무엇입니까? –

+0

@BrianAgnew 0입니다. – Aneesh

+0

sql을 직접 실행하면 'select * from t_imap_lastmsguid where folder_name = folder and credential = credential'이 반환됩니까? 또한 'folder'필드가 'folder_name'이라는 열과 일치하는 것으로 나타났습니다. 업데이트 기능의 폴더 란 무엇입니까? 그것은 문자열, 폴더 개체입니까? folder_name 열과 일치하는 올바른 유형의 폴더로 설정 한 매개 변수입니까? – Buurman

답변

1

주석에 따라 INSERT와 업데이트를 혼동스럽게 생각하는 것 같습니다. result이 0이면 WHERE 절이 아무 것도 아니므로 업데이트 할 것이 없음을 의미합니다.

또한 알려진 (매핑 된) 엔티티에 대해 UPDATE/INSERT를 실행하려고하는 이유는 무엇입니까? 오브젝트 (LastDownloadedMessage)에 값을 설정하고 EntityManager에서 persist을 실행하기 만하면됩니다. 웹에서 EntityManager.persist을 찾아보십시오.

+0

고마워! 실제로 삽입 대신에 UPDATE를 사용했습니다. – Aneesh