2012-02-23 17 views
0

嗨朋友,我正在開發一個使用hibernate和struts2的Web應用程序。我正在創建相冊,我成功完成了使用hibernate的工作,但是,在休眠時,插入到數據庫時出現問題。這個模塊就像這樣工作,只要文件上傳它將插入文件名,內容類型,id和它假設插入圖像文件(字節[])內容,但它顯示空值表中..我的代碼是這樣的...如何在POJO類的setter方法[會話文件上傳應用程序] Hibernate和struts 2中調用另一個方法

@Entity 
@Table(name="PHOTOALBUM") 
public class User implements Serializable { 
@Id 
@GeneratedValue 
@Column(name="PHOTO_ID") 
    private Long id; 

@Column(name="IMAGE") 
private byte[] Image; 


@Column(name="CONTENT_TYPE") 
    private String userImageContentType; 

@Column(name="PHOTO_NAME") 
    private String userImageFileName; 

      public Long getId() { 
    return id; 
} 
public void setId(Long id) { 
    this.id = id; 
} 

      public String getUserImageFileName() { 
     return userImageFileName; 
    } 

    public void setUserImageFileName(String userImageFileName) { 
     this.userImageFileName = userImageFileName; 
    } 

      public String getUserImageContentType() { 
     return userImageContentType; 
    } 

    public void setUserImageContentType(String userImageContentType) { 
     this.userImageContentType = userImageContentType; 
    } 

public byte[] getImage() { 
     return Image; 
    } 

    public void setImage(byte[] Image) { 
     Image=Change(this.getUserImage()); 
     this.Image = Image; 
    } 

    @Transient 
    private File userImage; 

    public File getUserImage() { 
     return userImage; 
    } 

    public void setUserImage(File userImage) { 
     this.userImage = userImage; 
    } 

    public byte[] Change(File userImage) 
    { 
     // userImage=this.getUserImage(); 
     // String name=userImage.getName(); 
     // long len=userImage.length(); 

     byte[] bFile = new byte[(int) userImage.length()]; 
     try { 

     FileInputStream fileInputStream = new FileInputStream(userImage); 
    fileInputStream.read(bFile); 
    fileInputStream.close(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     // System.out.println("The Name Of File In Pojo Class Is:="+ name); 
     //System.out.println("The Length Of File In Pojo Class Is:="+ len); 
     //System.out.println("The Content Of File In Pojo Class Is:="+ bFile); 
     return bFile; 
    } 

} 

,我保存的值這樣

public class UserDAOImpl implements UserDAO { 

@SessionTarget 
Session session; 

@TransactionTarget 
Transaction transaction; 

/** 
* Used to save or update a user. 
*/ 
@Override 
public void saveOrUpdateUser(User user) { 
    try { 
     session.saveOrUpdate(user); 
    } catch (Exception e) { 
     transaction.rollback(); 
     e.printStackTrace(); 
    } 
} 

/** 
* Used to delete a user. 
*/ 
@Override 
public void deleteUser(Long userId) { 
    try { 
     User user = (User) session.get(User.class, userId); 
     session.delete(user); 
    } catch (Exception e) { 
     transaction.rollback(); 
     e.printStackTrace(); 
    } 
} 

/** 
* Used to list all the users. 
*/ 
@SuppressWarnings("unchecked") 
@Override 
public List<User> listUser() { 
    List<User> courses = null; 
    try { 
     courses = session.createQuery("from User").list(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return courses; 
} 

/** 
* Used to list a single user by Id. 
*/ 
@Override 
public User listUserById(Long userId) { 
    User user = null; 
    try { 
     user = (User) session.get(User.class, userId); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return user; 
} 

} 

Struts動作映射是這樣的......

\<package name="default" extends="hibernate-default"> 
<action name="saveOrUpdateUser"method="saveOrUpdate"class="com.srikanth.web.UserAction"> 
     <result name="success" type="redirect">listUser</result> 
    </action> 
    <action name="listUser" method="list" class="com.srikanth.web.UserAction"> 
     <result name="success">/register.jsp</result> 
    </action> 
    <action name="editUser" method="edit" class="com.srikanth.web.UserAction"> 
     <result name="success">/register.jsp</result> 
    </action> 
    <action name="deleteUser" method="delete" class="com.srikanth.web.UserAction"> 
     <result name="success" type="redirect">listUser</result> 
    </action> 
</package> 

和我的JSP是這樣

\<s:form action="saveOrUpdateUser"> 
<s:push value="user"> 
    <s:hidden name="id" /> 
    <s:file name="userImage" label="User Image" /> 
      <s:submit /> 
</s:push> 
</s:form> 
<s:iterator value="userList" status="userStatus"> 
     <s:property value="id" /> 
      <s:property value="userImageFileName" /> 
      <s:property value="userImageContentType" /> 
      <img src='<s:property value="userImage" />' alt"" /> 
      <s:url id="deleteURL" action="deleteUser"> 
       <s:param name="id" value="%{id}"></s:param> 
      </s:url> <s:a href="%{deleteURL}">Delete</s:a> 
    </s:iterator> 

我試圖調用的方法更改,以便它使用二傳手轉換爲byte []的文件,並將其存儲在一個字節[]圖像變量,但它不工作.... 所以,請幫助我與這一個..... 在此先感謝

回答

0

根據我的理解問題問題是隻插入文件到表中。複製&將Change()方法粘貼到com.srikanth.web.UserAction類中,因爲您對每個數據庫事務都使用此操作。在DB中插入/更新之前使用Change()方法。

例如:

public class UserAction extends ActionSupport{ 
    //variable to get file from jsp 
    private File uploadedImage; 
    ..... 
    //setters & getters for uploadedImage 


@Override 
public String gsexecute() throws Exception { 

    User user = new User(); 

    //set image value as byteArray 
    user.setImage(Change(uploadedImage)); 

    //insert or update DB here 

    return SUCCESS; 
} 

public byte[] Change(File userImage) 
    { 
    // userImage=this.getUserImage(); 
    // String name=userImage.getName(); 
    // long len=userImage.length(); 

    byte[] bFile = new byte[(int) userImage.length()]; 
    try { 

    FileInputStream fileInputStream = new FileInputStream(userImage); 
fileInputStream.read(bFile); 
fileInputStream.close(); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
    // System.out.println("The Name Of File In Pojo Class Is:="+ name); 
    //System.out.println("The Length Of File In Pojo Class Is:="+ len); 
    //System.out.println("The Content Of File In Pojo Class Is:="+ bFile); 
    return bFile; 
    } 

} 

,並確保表列應該支持字節數組插入。例如:對於MYSQL使用BLOB列類型。

相關問題