JPA存储库未从数据库中删除

时间:2018-12-18 09:58:26

标签: java spring-boot jpa spring-data-jpa repository

所以,我有这个实体

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”

我要补充一下,保存效果很好。

有帮助吗?

4 个答案:

答案 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);

关注层叠类型。由于级联,除非删除子级,否则它将无法删除其父级表项。

所以尝试注释级联类型。