JPA 不持久化到数据库,而是保存到文件系统



我正在尝试将byte[]字段保存到本地文件系统而不是数据库。

我已经尝试了 JPA 注释@Transient

@Entity
@Table(name = "screenshot")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Screenshot implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
@Lob
@Transient
@Column(name = "image", nullable = false)
private byte[] image;
@Column(name = "otherField", nullable = false)
private String otherField;
@Column(name = "otherField2", nullable = false)
private String otherField2;
}

但是在我持久化实体之后,例如,由于注释@TransientreturnedEntityimage属性将不会返回。

Screenshot returnedEntity = screenshotRepository.save(entity);

但是我需要先将其保留在数据库中,以便获得唯一 ID 并将此 ID 用作文件路径的一部分,以仅保留本地文件系统中的图像(二进制(字段。

我遇到这样一种情况,即在将实体保存到数据库中之前,我没有唯一的 ID。但是在保存实体后,我丢失了二进制字节[]数据以将文件保存在本地文件系统中。

似乎找不到将保存的ID链接到二进制字节[]的好方法。

您的问题是您希望该字段同时被瞬态和包含(序列化(。有些人建议使用@JsonInclude注释,就像这里提到的一样。

但是,从我的角度来看,这个想法存在于应用程序的逻辑中,与 JPA 无关。因此,我会在抗拒对象之前复制对象,或者至少单独复制图像字段。电阻后,将被电阻对象的 ID 分配给复制对象的 ID。

或者,另一种解决方案是,您可以向数据库添加一个字符串字段,该字段将保存图像的路径;首先将图像写入"心脏内容"或任意位置,然后将图像的路径分配给实体并将该路径保留在数据库中。

或者,另一种解决方案是,您可以在实体层上方向系统添加另一个数据模型层,其中包含 JSON 类,这样您就不需要在实体中包含瞬态字段或 JSON 注释。

最新更新