Spring Security 无法在处理post请求时提交JPA事务

disho6za  于 12个月前  发布在  Spring
关注(0)|答案(2)|浏览(182)

我试图发送一个JSON格式的带有图片附件和员工详细信息的发布请求。对于ImageData和Employee,我有不同的表。我可以用我的代码存储图片数据,但不能存储员工数据。显示错误消息“无法提交JPA事务”。这里我分享我的代码详细信息

#Post Request
@PostMapping("/create")
    public Employee tempCreateEmployee(
            @RequestParam("json") String json,
            @RequestParam("file") MultipartFile file
    ) throws CustomException {
        try {

            ObjectMapper objectMapper = new ObjectMapper();
            logger.info("data received as string");

            Employee employee = objectMapper.readValue(json, Employee.class);
            logger.info(employee.toString());

            logger.info("Received employee data: {}", employee);
            
            int imageId=fileService.uploadImageFile(file);
            logger.info("file processing successful");
            
            employee.setImageid(imageId);
            logger.info(employee.toString());
           
            return employeeService.save(employee);
        } catch (Exception ex) {
           
            throw new CustomException("Employee object not created");
        }
    }

字符串
一种上传图片的服务方法

public int uploadImageFile(MultipartFile file) throws IOException {
        ImageData imageData= filesRepo.save(ImageData.builder()
                .name(file.getOriginalFilename())
                .type(file.getContentType())
                .id(filesRepo.findAll().size()+1)
                .image_filedata(ImageUtils.compressImage(file.getBytes())).build());
        
       
        return imageData.getId();

    }

员工模型类:

package com.SpringTask.SpringTask.Models;

import com.SpringTask.SpringTask.Encryption.Encrypt;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.persistence.*;
import jakarta.validation.constraints.*;
import jdk.jfr.DataAmount;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;

import lombok.*;

@AllArgsConstructor
@NoArgsConstructor
@Builder
@Setter
@Getter
@Data
@Entity
@Table(name="tableEmployees")

public class Employee {
    @Id
    @GeneratedValue
    public Integer id;

    public String firstName;

  
    public String lastName;

    
    public String address;

    
    public String email;

    
    public int phoneNumber;

  

    private int imageid;

   }

ImageData模型类:

package com.SpringTask.SpringTask.Models;

import jakarta.persistence.*;
import jakarta.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.*;
import lombok.NoArgsConstructor;
import org.hibernate.engine.internal.Cascade;

import java.util.Arrays;

@Entity
@Table(name = "tableImageData")
@Builder(toBuilder = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter

public class ImageData {
    @Id
    private int id;

    private String name;
    private String type;

    @Lob
    @Column(name = "image_filedata", columnDefinition = "LONGBLOB")
    private byte[] image_filedata;
    
}


的数据
我试过调试,但每次都出现同样的问题。我已经验证了我的数据库设置和代码逻辑。无法提交JPA事务意味着什么?

uurv41yg

uurv41yg1#

enter image description here
当在Postman中发送请求时,您可以尝试通过Body中的raw和json模型发送数据。

gblwokeq

gblwokeq2#

您需要共享JSON数据和EmployeeService类以更好地理解问题。
从你分享的图片中,我发现了一个问题:
你给予id来创建一个雇员,但是在Employee模型中,它是由Hibernate通过指定@GeneratedValue在你的模型中自动生成的。所以这是错误的,你不应该在你的JSON数据中添加id字段。这可能是得到错误的原因。
如果你想在外部给予id,那么你需要删除Employee类中的@GeneratedValue注解。

相关问题