有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何忽略@Where hibernate

我有一个实体作者

@Data
@Entity
@DynamicInsert
@Where(clause = "isDeleted=false")
public class Author

还有一本实体书

@Data
@Entity
@DynamicInsert
public class Book {
...

    @OneToOne(cascade = {CascadeType.MERGE, CascadeType.REMOVE }, fetch = FetchType.EAGER,orphanRemoval = true)
        @JoinColumn(name = "author_id", nullable = false )
        private Author author;
    }

我需要得到所有的书,即使作者被删除了。我使用JpaRepository:

public interface BookRepository extends JpaRepository<Book, Long>, JpaSpecificationExecutor {} 

但当我尝试的时候

bookRepository.findAll()

我有一个例外:javax。坚持不懈EntityNotFoundException:找不到id为1的作者

尝试过这个,但对我没有帮助:

public interface BookRepository extends JpaRepository<Book, Long>, JpaSpecificationExecutor {

    @Override
    @Query(value = "from Book as b where b.author.isDeleted = true")
    List<Book> findAll();

我怎样才能避免@where


共 (1) 个答案

  1. # 1 楼答案

    你试过:

    @Data
    @MappedSuperclass
    public abstract class GeneralAuthor 
    
    @Entity
    @DynamicInsert
    public class Author extends GeneralAuthor {}
    
    @Entity
    @DynamicInsert
    @Where(clause = "isDeleted=false")
    public class ActiveAuthor extends GeneralAuthor {}
    

    这里GeneralAuthor是一个基本数据结构(从当前Author复制粘贴)

    Author重命名为ActiveAuthor,提供了关于它是什么的更多信息:活动(未删除)作者记录

    一个新的实体Author实体允许您访问任何类型的作者(已删除或未删除),并且应该在映射到Book中使用

    这将允许您重用所有数据结构,并在同一作者实体上拥有灵活的视图。注意:AuthorActiveAuthor不声明任何自己的字段