2016-04-25 64 views
1

我是Spring的新用戶,並且想爲會員保存個人資料圖片。我正在使用lombok和JPA。如何將@GeneratedValue編號的圖像存儲在文件名中?

@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(); 
    } 

我期待一個POST所有的數據。該圖片將作爲basic64編碼的字符串發送,但在數據庫中只應存儲指向圖像的鏈接。爲了找到並確定每個成員的正確圖片,我想用生成的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); 
相關問題