首页 > 解决方案 > Marklogic - 如何在 Java POJO 中从外部指定集合名称(使用 spring JPA 存储库)

问题描述

我是 Marklogic 的新手,想在 Java POJO 中从外部指定集合名称。目前 spring JPA 存储库尝试搜索名称为 pojo 的类名的集合。

@Repository
public interface PersonRepository extends MarkLogicRepository<Person, String> {
}
public class Person {

    @Id
    private String personId;

    private String personName;

}

所以在上面的例子中,spring 从“Person”集合中获取数据,这对我的本地开发来说很好。但是对于开发和测试服务器,我需要从版本化集合中获取数据,例如可以在 application.properties 文件中配置的“Person_V1”/“Person_V2”。如何使集合名称可配置?

标签: javaspring-data-jpamarklogic

解决方案


值得注意的是,MarkLogiccollection是文档元数据类别之一。它是非分层的并且与版本|类无关。

在我看来,您首先尝试映射entityPOJO 以定义collection需要编组的内容。将Annotation是这样的:

    @Document(
            uri = "/person_{version}/${GUID}.xml",
            collectionPrefix = "{collection-prefix|null}",
            collection = "${method.getName()}"
    ) 

第二,您说您希望collectionapplication.properties. 然后.properties文件如下所示:

# prefix could be `Person_V1`, ` Person_V2` or null
person.collectionPrefix =   
person.collection = 

您可以Annotation在主类中定义,例如:

    @Value("${person.collectionPrefix}")
    private String ***;
    @Value("${person.collection}")
    private String ***;

优化的 MarkLogic Java 文档操作归结为:

  metadata(Handle).getCollections().add(All)("{collection-array}"); 

但是,为您提供余地的是args在方法 to中定义 POJO 对象setCollections() | getCollections()

MarkLogicmetadata类和方法的完整回顾是:

https://docs.marklogic.com/javadoc/client/com/marklogic/client/io/DocumentMetadataHandle.html

推荐阅读