2012-06-01 3 views
-1

DB에 저장하려는 이미지 파일이 Inputstream/byte[]인데 이미 BLOB 필드를 업데이트하려는 엔티티 만 저장 했으므로 이드의 행 ID가 있습니다. 나는 다음과 같은 시도했지만 나를 위해 작동하지 않습니다 :간단한 최대 절전 쿼리를 사용하여 BLOB 필드를 업데이트하는 방법

Query query = session.createSQLQuery("update tableName set blobFieldName=:blbContent where id=5); 

query.setBinary("blbContent",myByteArray) 

int val = query.executeUpdate(); 

N이 발 1을 반환하지만, 실제로 DB에는 그 갱신이 일어나지 않았다 ... 내가 틀렸다 어디 이해할 수있다. 도와주세요. 이 작업이 필요합니다 ...

+1

2 가지 : a) 인코딩하지 않고 DML 문에서 바이트 데이터를 스트리밍 할 수 없습니다. b) 명세서에 "blobFieldName"이 있습니다. - blob이 저장된 곳입니까? 객체를 지속시키기 위해서는 최대 절전 모드 세션을 사용해야합니다. – Dan

+1

많은 데이터베이스가 이러한 방식으로 LOB 데이터를 직접 조작 할 수 없습니다. 즉, 데이터베이스가 SQLException을 던지면 안된다. 성명이 "성공"하면 다른 문제가 있다고 생각해야합니다. 거래를 저 지르셨습니까? –

+0

예 ... 거래를 저지르는 것을 잊었습니다. 지금 일하고 있습니다. –

답변

1

동일한 문제가 발생했지만 해결책을 찾았습니다.

난 당신이 내 코드를 공유합니다 :

//this is a update method 
**public boolean updateImage(Image image) { 

    Session session = template.getSessionFactory().openSession(); 

    Transaction transaction = session.beginTransaction(); 

    session.saveOrUpdate(image); 

    session.flush(); 

    transaction.commit(); 

    session.close(); 

    return true; 
}** 

를 아래에있는 내 Image 클래스는, 나는 그것이 당신을 도울 것입니다 희망 이미지 유형은 물방울

public class Image { 


    private int id; 

    private Blob image; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public Blob getImage() { 
     return image; 
    } 

    public void setImage(Blob image) { 
     this.image = image; 
    } 
} 

입니다 사용할 수 있습니다.

관련 문제