如何在 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);
我正在使用 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);