我可以扩展/覆盖Spring Data中的哪些类以使where子句包含继承基本实体/模型的类?
详细说明......
以下是一些从" base"延伸的模型。活动类:
@Document
public abstract class Activity {
}
@Document
public class CommentActivity extends Activity {
}
@Document
public class ShareActivity extends Activity {
}
保存这些模型时,我使用单个存储库类定义如下,并使用" findBy"方法:
@Repository("activityRepository")
public interface Activity extends CouchbaseRepository<Activity, String>, CouchbaseRepositoryCustom<Activity, String> {
Page<Activity> findByPersonId(String personId, Pageable pageable);
}
// saving a model in my application would be like so
activityRepository.save(new CommentActivity());
从Couchbase中检索回来时,结构返回如下:
{
"_CAS": 123234342354345,
"_ID": "0001",
"_class": "com.myproject.models.CommentActivity",
"comment": "yo",
"dateCreated": 1400000000000,
"dateUpdated": 1400000000000,
"personId": "0001"
}
该项目使用的是Spring Data Couchbase 2.2.0.RELEASE。基于上面的Repository Interface,调用findByPersonId方法将自动生成一个只包含where子句中的基类的查询。
WHERE (`personId` = "0001") AND `_class` = "com.myproject.models.Activity"
在我的情况下,我想包括从Activity扩展的所有类型:
WHERE
(`_class` = "com.myproject.models.Activity"
OR `_class` = "com.myproject.models.UpdatedActivity"
OR `_class` = "com.myproject.models.StatusChangedActivity")
AND personId = "0001"
答案 0 :(得分:0)
您可以定义自己的查询字符串,例如
@Query("#{#n1ql.selectEntity} WHERE personId = ${'$'}personId AND (_class='com.myproject.models.UpdatedActivity' OR _class='com.myproject.models.StatusChangedActivity'")
fun findByPersonId(@Param("personId") personId: String): List<Activity>
上面的代码在Kotlin中,但是我想很容易适应Java。
请注意,我必须向存储库类添加@N1qlPrimaryIndexed
。