Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring data couchbase文档java类继承_Java_Spring_Inheritance_Couchbase_Spring Data Couchbase - Fatal编程技术网

Spring data couchbase文档java类继承

Spring data couchbase文档java类继承,java,spring,inheritance,couchbase,spring-data-couchbase,Java,Spring,Inheritance,Couchbase,Spring Data Couchbase,我的问题是,SpringDataCouchbase不搜索所搜索类的子类。例如: 型号: @Document class A { @Id String id } @Document class B extends A {} 和存储库: public interface ARepository extends PagingAndSortingRepository<A, String>{ Page<A> findAll(Pageable page

我的问题是,SpringDataCouchbase不搜索所搜索类的子类。例如:

型号:

@Document 
class A { 
   @Id
   String id 
}

@Document
class B extends A {}
和存储库:

public interface ARepository extends PagingAndSortingRepository<A, String>{
     Page<A> findAll(Pageable pageable);
}
@NoRepositoryBean
public interface SuperClassBaseRepository<T extends SuperClass> 
extends PagingAndSortingRepository<T, Integer> { 
     public T findAll();
公共接口存储库扩展了分页和排序存储库{
页面findAll(可分页可分页);
}
Spring DataCouchbase生成查询,该查询具有where条件

_class=“com.example.model.A”


但是我想在这个查询中搜索B文档。有办法吗,我该怎么做?当我编写自己的查询时,我必须在查询中定义顺序、限制和偏移量,并且不使用Pageable。但是我想使用Pageable。

考虑基于继承的通用接口

首先创建超级类:

@Inheritance
public abstract class SuperClass{ 

  @Id
  private int id;
}
然后创建子类:

public class A extends SuperClass { /* ... */ }
public class B extends SuperClass { /* ... */ }
创建基本存储库:

public interface ARepository extends PagingAndSortingRepository<A, String>{
     Page<A> findAll(Pageable pageable);
}
@NoRepositoryBean
public interface SuperClassBaseRepository<T extends SuperClass> 
extends PagingAndSortingRepository<T, Integer> { 
     public T findAll();
@NoRepositoryBean
公共接口超类库
扩展分页和排序存储库{
公共T findAll();
}

然后基于基本repo创建超类存储库:

@Transactional
public interface SuperClassRepository extends SuperClassBaseRepository<SuperClass> { /* ... */ }

@Transactional
public interface ARepository extends SuperClassBaseRepository<A> { /* ... */ }

@Transactional
public interface BRepository extends SuperClassBaseRepository<B> { /* ... */ }
@Transactional
公共接口SuperClassRepository扩展了SuperClassBaseRepository{/*…*/}
@交易的
公共接口ARepository扩展了超classbaserepository{/*…*/}
@交易的
公共接口BRepository扩展了SuperClassBaseRepository{/*…*/}

SuperClassRepository
findAll()
将搜索所有A和B类

我们设法在SpringDataCouchbase 3.2.12上完成了这项工作。以下是我们所做的:

我们发现,每种类型的映射器只有在存在该类型的存储库时才会创建,因此,除了我们的超类存储库之外

公共接口存储库扩展了分页和排序存储库{
页面findAll(可分页可分页);
}
我们为每个子类型创建了一个空存储库,例如:

公共接口存储库扩展了分页和排序存储库{
//没有办法
}
第二次回购的存在保证了
B
的适当映射器的存在,因此当
findAll
(或其他方法)在
ARepository
中调用时,每个子类的映射器都存在。完成此操作后,我们能够得到一个实际为
B
实例的
a
列表


希望这会有所帮助,没有人会在这方面浪费更多的时间。:)

感谢您的帮助,但这只能在SpringDataJPA中实现。Spring data couchbase没有@Inheritation注释。SpringDataCouchbase中也有类似的东西吗?嗨,托马斯。您是否找到了一种使用SpringDataCouchbase的方法?我的答案有帮助吗?