如何解决如何在spring boot模型中定义一个用于加载多个图像的字段
我正在使用 spring boot、angular 和 mysql 开发车辆库存跟踪系统的应用程序。车辆的多个图像将从界面加载。通常,当只有一张图像时,我会使用 @lob 注释定义一个 byte [] 类型的字段。但是当有多个图像进入时,我如何将其保留在数据库中。我认为需要关系结构,但我不能。
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;
}
解决方法
是的,您需要有一对多的关系。
为车辆图像添加另一个数据库表和实体。假设我们称它为 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
类中添加了两个实用方法。有关详细信息,请参阅 Vlad Mihalcea 的这篇精彩博文 -> 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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。