5

I am new in Spring and Hibernate and i'm develop E-Commerce management system and my trouble is in the uploading files into DB with Hibernate. I have some service but that i see it doesn't work.

here is my code

domain

@Entity
@Table(name = "DEPUTES_APPEAL")
public class DeputesAppeal implements Serializable {

@Id
@Column(name = "ID")
@GeneratedValue
private long id;

@Column(name = "NumberOfAppeal")
private Integer number;

@Column(name = "DateOfIncomingAppeal")
private Date IncomingDate;

@Column(name = "NameOfDepute")
private String NameOfDepute;

@Column(name = "ResolutionOfChief")
private String ResolutionOfChief;

@Column(name = "TypeOfAppeal")
private String typeOfAppeal;

@OneToMany(mappedBy = "deputesAppeal", cascade =                                                                           
CascadeType.ALL, fetch= FetchType.EAGER)

private final Set<UploadFiles> fileUpload = new HashSet<UploadFiles>           
();

public DeputesAppeal(){}

public DeputesAppeal(int id, int number, Date incomingDate, String   
nameOfDepute, String resolutionOfChief) {
    this.id = id;
    this.number = number;
    this.IncomingDate = incomingDate;
    this.NameOfDepute = nameOfDepute;
    this.ResolutionOfChief = resolutionOfChief;
}


public long getId() {
    return id;
}

public Integer getNumber() {
    return number;
}

public void setNumber(Integer number) {
    this.number = number;
}

public Date getIncomingDate() {
    return IncomingDate;
}

public void setIncomingDate(Date incomingDate) {
    IncomingDate = incomingDate;
}

public String getNameOfDepute() {
    return NameOfDepute;
}

public void setNameOfDepute(String nameOfDepute) {
    NameOfDepute = nameOfDepute;
}

public String getResolutionOfChief() {
    return ResolutionOfChief;
}

public void setResolutionOfChief(String resolutionOfChief) {
    ResolutionOfChief = resolutionOfChief;
}

public String getTypeOfAppeal() {
    return typeOfAppeal;
}

public void setTypeOfAppeal(String typeOfAppeal) {
    this.typeOfAppeal = typeOfAppeal;
}

public Set<UploadFiles> getFileUpload() {
    return fileUpload;
}
}  

dao layer where i am save object whose field is Set of UploadFiles

public class MysqlImpl implements DeputesAppealDao{

@Autowired
SessionFactory sessionFactory;

public List<DeputesAppeal> getAll() {
    Query query = sessionFactory.getCurrentSession().createQuery("from  
DeputesAppeal");
    return query.list();
}

public DeputesAppeal getById(Integer id) {
    DeputesAppeal deputesAppeal = (DeputesAppeal)   
sessionFactory.getCurrentSession().get(DeputesAppeal.class, id);
    return deputesAppeal;
}

public void addAppeal(DeputesAppeal deputesAppeal,   
CommonsMultipartFile[] fileUpload) {
    if (fileUpload != null && fileUpload.length > 0) {
        for (CommonsMultipartFile aFile : fileUpload) {
            UploadFiles uploadFiles = new UploadFiles();
            uploadFiles.setFileName(aFile.getOriginalFilename());
            uploadFiles.setData(aFile.getBytes());
            deputesAppeal.addFile(uploadFiles);
            sessionFactory.getCurrentSession().save(deputesAppeal);
        }
    }
}

public void deleteAppeal(Integer id) {
     DeputesAppeal deputesAppeal = (DeputesAppeal)  
sessionFactory.getCurrentSession().get(DeputesAppeal.class, id);
     sessionFactory.getCurrentSession().delete(deputesAppeal);
}

public void editAppeal(DeputesAppeal deputesAppeal, DeputesAppeal  
existingDeputesAppeal) {
     sessionFactory.getCurrentSession().save(existingDeputesAppeal);
}

public DeputesAppeal modSession(DeputesAppeal deputesAppeal) {
    DeputesAppeal deputesAppeal1 = (DeputesAppeal) 
sessionFactory.getCurrentSession().get(DeputesAppeal.class, 
deputesAppeal.getId());
    return  deputesAppeal1;
}


public List<DeputesAppeal> abstractSearch(String searchingChar) {
    Query query = sessionFactory.getCurrentSession().createQuery("from     
DeputesAppeal where id = " + searchingChar);
    return query.list();
}


}

and at least is Controller

@Controller
@RequestMapping(value = "/main")
public class MainController {

@Qualifier("deputesAppealServiceBean")
@Autowired
DeputesAppealService deputesAppealService;


@RequestMapping(value = "/mainFrame", method = RequestMethod.GET)
public String getMainPage(){
    return "mainPage";
}

@RequestMapping(value = "/resultOfSearching", method =   
RequestMethod.GET)
public String getSearchResult(Model model, 
@ModelAttribute("searchChar")String searchResult){
    List<DeputesAppeal> deputesAppeals =  
deputesAppealService.abstractSearch(searchResult);
    model.addAttribute("ListOfAppeals", deputesAppeals);
    return "searchingResultPage";
}

@RequestMapping(value = "mainFrame/new", method = RequestMethod.GET)
public String getAddNewAppealPage(){
    return "addPage";
}


@RequestMapping(value = "mainFrame/new", method = RequestMethod.POST)
public String addNewAppeal(@ModelAttribute("Appeal")DeputesAppeal  
deputesAppeal,

@RequestParam("fileUpload")CommonsMultipartFile[] fileUpload){
    deputesAppealService.add(deputesAppeal, fileUpload);
    return "mainPage";
}

@RequestMapping(value = "mainFrame/deleted", method =  
RequestMethod.GET)
public String deleteAppeal(@RequestParam(value = "id", required = 
true) Integer id, Model model){
    deputesAppealService.delete(id);
    model.addAttribute("id", id);
    return "deletedPage";
}

@RequestMapping(value = "mainFrame/editPage", method =    
RequestMethod.GET)
public String GetEdit(@RequestParam(value = "id", required = true) 
Integer id, Model model){
    model.addAttribute("editedAppeal", 
deputesAppealService.getById(id));
    return "editPage";
}

@RequestMapping(value = "mainFrame/editPage", method =  
RequestMethod.POST)
public String editCurrentAppeal(@ModelAttribute("userAttribute") 
DeputesAppeal deputesAppeal,@RequestParam(value = "id", required =   
true)Integer id, Model model) {
    deputesAppeal.setNumber(id);
    deputesAppealService.edit(deputesAppeal);
    model.addAttribute("id", id);
    return "editedPage";
}
}

and when on JSP page i submit input data i handle the next errors

HTTP Status 500 - Request processing failed; nested exception is       
org.springframework.dao.DataIntegrityViolationException: could not 
execute statement; SQL [n/a]; nested exception is 
org.hibernate.exception.DataException: could not execute statement

domain of UploadFiles

@Entity
@Table(name = "UploadFiles")
public class UploadFiles implements Serializable {

@Id
@GeneratedValue
@Column(name = "FILE_ID")
private long id;

@Column(name = "FILE_NAME")
private String fileName;

@Column(name = "FILE_DATA")
private byte[] data;

@ManyToOne
@JoinColumn(name = "ID")
private DeputesAppeal deputesAppeal;

public UploadFiles(){}

public UploadFiles(long id, String fileName, byte[] data){
    this.id = id;
    this.fileName = fileName;
    this.data = data;
}


public long getId() {
    return id;
}

public String getFileName() {
    return fileName;
}

public void setFileName(String fileName) {
    this.fileName = fileName;
}

public byte[] getData() {
    return data;
}

public void setData(byte[] data) {
    this.data = data;
}

public DeputesAppeal getDeputesAppeal() {
    return deputesAppeal;
}

public void setDeputesAppeal(DeputesAppeal deputesAppeal) {
    this.deputesAppeal = deputesAppeal;
}
2
  • Your problem lies within the data you are passing to the DB. Show us what you are trying to persist, because some of the information is missing, most likely regarding UploadedFile. Commented Apr 5, 2016 at 19:17
  • added Entity of UploadFiles Commented Apr 5, 2016 at 19:18

3 Answers 3

21

For anyone else stumbling on this - it has to do with the data you are trying to insert - for me it was attempting to insert a String that was longer than the size set in the Hibernate annotations. In debugging, you can follow the cause of the Exception to find the root cause.

Sign up to request clarification or add additional context in comments.

Comments

2

I got this error because I was saving too much data in varchar. I changed it to type text and increased char limit to 65535.

Comments

2

I got this error due to not enough filed length in the database table.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.