#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);