Как определить поле для загрузки нескольких изображений в модели загрузки Spring

#image #spring-boot #entity

#изображение #spring-boot #сущность

Вопрос:

Я разрабатываю приложение для системы отслеживания запасов транспортных средств, используя spring boot, 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;


}
 

Ответ №1:

Да, вам нужно иметь отношение один ко многим. Добавьте еще одну таблицу БД и объект для изображений транспортных средств. Допустим, мы назвали его 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 класс следующим образом:

 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 . Подробнее см. Этот Замечательный пост Влада Михалча -> 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);