2016-04-25 7 views
1

私は春に新しく、メンバーのプロフィール画像を保存したいと思います。私はロンボクとJPAを使用しています。ファイル名に@GeneratedValue IDの画像を保存するにはどうすればよいですか?

@Data 
@Entity 
public class Member { 

    private @Id @GeneratedValue Long id; 
    private String firstname; 
    private String lastname; 
    private Date entryDate; 
    private String shortDescription; 
    private String function; 
    private String picture; 

    protected Member() { 
     this.entryDate = new Date(); 
    } 

私はすべてのデータを1つのPOSTを期待しています。画像はbasic64でエンコードされた文字列として送信されますが、DBには画像へのリンクのみが格納されます。各メンバーの正しい画像を見つけて識別するために、生成されたIDで名前を付けたいと思います。これは私がすでに行ったことです:

public void setPicture(String picture){ 
    File folder = new File("images"); 
    if(!folder.exists()){ 
     folder.mkdir(); 
    } 
    String[] base = picture.split(","); 
    String[] type = base[0].split("/|;"); 
    this.picture = "images/" + id + "." + type[1]; 
    try { 
     byte[] imageByte = Base64.getDecoder().decode(base[1]); 
     new FileOutputStream(this.picture).write(imageByte); 
    } catch(Exception e){ 
     e.printStackTrace(); 
     //TODO: what is best practice here? 
     this.picture = "images/default.jpg"; 
    } 
} 

私の問題は、この時点でのIDが存在しないということです。 IDが生成された後で、後でこのメソッドを呼び出す方法はありますか?あるいは、この問題を解決するために別の方法を選択する必要がありますか?この問題を解決するためのチュートリアルや質問はありませんでした。

+1

あなたは実体が保存された後、ディスクにイメージを書き込むためにインターセプタを使用することができます。 http://blog.janjonas.net/2010-02-17/hibernate-interceptor-update-entity-property-on-update-on-saveを参照してください。 – ericbn

答えて

0

簡単な解決策はそのようにそれを使用することです:

entityManager.persist(member); 
member.setPicture("pictureString"); 
entityManager.merge(member); 
関連する問題