所以,我有这个实体
const fileBinary = file.data.toString('binary')
这里有jpa存储库:
@Entity
@Table(name = "VISITOR_IMAGE")
public class VisitorImage implements Serializable {
@Id
@Column(name = "VISITOR_ID")
private Long visitorId;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@PrimaryKeyJoinColumn(name = "VISITOR_ID", referencedColumnName = "ID")
private Visitor visitor;
@Column(name = "NAME")
private String name;
@Column(name = "DATA")
private byte[] data;
@Column(name = "CONTENT_TYPE")
private String contentType;
@Column(name = "SIZE")
private Long size;
//getters and setters
}
因此,当我在服务中调用Delete时,没有任何错误或任何提示,但并未删除
@Repository
public interface VisitorImageRepository extends JpaRepository<VisitorImage, Long> {}
我不知道为什么不删除它...表的主键是“ VISITOR_ID”
我要补充一下,保存效果很好。
有帮助吗?
答案 0 :(得分:0)
您已将vistor一对一映射,并将级联选项持久化,即“ cascade = CascadeType.PERSIST” 它阻止您删除。 要删除,您需要将层叠选项设置为Cascade.All或Cascade.Remove
答案 1 :(得分:0)
您可以尝试以下替代方法deleteById
public void deleteUserById(long id) {
visitorRepository.deleteById(id);
}
答案 2 :(得分:0)
[已解决] 问题出在具有
的访问者实体上@OneToOne(mappedBy = "visitor", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, orphanRemoval = true)
private VisitorImage visitorImage;
我将CascadeType更改为仅REMOVE,并且现在可以使用。
答案 3 :(得分:-1)
将存储库自动连接到编写了此delete方法的类。 喜欢
@Autowired
private VisitorImageRepository visitorRepository;
然后调用删除方法。
visitorRepository.delete(visitorId);
关注层叠类型。由于级联,除非删除子级,否则它将无法删除其父级表项。
所以尝试注释级联类型。