如何在 spring 引导模型中定义用于加载多个图像的字段

How to define a field for loading multiple images in spring boot model

我正在使用 spring 引导、angular 和 mysql 开发车辆库存跟踪系统的应用程序。将从界面加载车辆的多个图像。通常情况下,只有一张图片的时候,我定义一个byte[]类型的字段,加上@lob注解​​。但是当有不止一张图片进来的时候,我怎么能把它保存在数据库里呢。我认为需要一个关系结构,但我做不到。

public class User extends BaseEntity{

    @Column(name = "TC_NUM", unique = true)
    @NotNull
    private String tcNum;

    @Column(name = "EMAIL", unique = true)
    @NotNull
    private String email;

    @Column(name = "USERNAME", unique = true)
    @NotNull
    private String username;

    @Column(name = "PASSWORD")
    @NotNull
    private String password;

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "User_ROLES",
            joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "ROLE_ID"))
    @NotNull
    private Set<Role> roles;


}

是的,您需要一对多关系。 为车辆图像添加另一个数据库 table 和实体。假设我们称它为 VehicleImage:

@Entity
@Table(name="vehicle_image")
public class VehicleImage{
    @Id
    private Long id;

    @Lob
    @Column(name = "image", columnDefinition="BLOB")
    private byte[] image;

    @ManyToOne(fetch = FetchType.LAZY)
    private User user;

    public VehicleImage() {}
    
    // getters and setters
}

并像这样将映射添加到您的 User class:

public class User extends BaseEntity{
    @OneToMany(
        mappedBy = "user",
        cascade = CascadeType.ALL,
        orphanRemoval = true
    )
    private Set<VehicleImage> vehicleImages;
  
    public void addVehicleImage(VehicleImage vehicleImage) {
        vehicleImages.add(vehicleImage);
        vehicleImage.setUser(this);
    }
 
    public void removeVehicleImage(VehicleImage vehicleImage) {
        vehicleImages.remove(vehicleImage);
        vehicleImage.setUser(null);
    }
//rest of your class

}

如您所见,我还向 User class 添加了两个实用方法。有关详细信息,请参阅 Vlad Mihalcea 的精彩 post -> https://vladmihalcea.com/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/

现在您可以像这样持久保存图像了:

User user = new User();
 
user.addVehicleImage(
    new VehicleImage (imageBytesArray)
);

entityManager.persist(user);