【问题标题】:Can you generate Secondary Index DDL statements from an annotated class?您可以从带注释的类生成二级索引 DDL 语句吗?
【发布时间】:2021-05-12 12:07:56
【问题描述】:

我目前正在使用 SpannerShemaUtils.getCreateTableDdlStringsForInterleavedHierarchy(Class) 生成“CREATE TABLE”语句

例子

@Table(name = "#{@googleSpannerTablePrefix}Person")
public class Person {
   @PrimaryKey
   Integer personId;
   String name;
   Integer age;
}

生成创建表 DDL

SpannerShemaUtils.getCreateTableDdlStringsForInterleavedHierarchy(Person.class)

这会产生

CREATE TABLE Person (  personId INT64 ,  name STRING(MAX) , age INT64 ) PRIMARY KEY ( personId );

如果@googleSpannerTablePrefix bean 设置为“Example”,它会生成这个。

CREATE TABLE ExamplePerson (  personId INT64 ,  name STRING(MAX) , age INT64 ) PRIMARY KEY ( personId );

@Table 注释允许使用 sPel 表达式(见上文),因此我可以为表名添加前缀。

有没有办法以同样的方式生成 Create index DDL 语句?

【问题讨论】:

    标签: spring-boot google-cloud-spanner


    【解决方案1】:

    我检查了 api 文档。 https://docs.oracle.com/javaee/7/api/javax/persistence/Index.html 以下代码可能有效。你能试试这个吗?

    @Table(name = "#{@googleSpannerTablePrefix}Person", 
        indexes=[@Index(name="#{@googleSpannerTablePrefix}Person_1", columnList="name")])
    

    【讨论】:

    • 我会检查的。现在我正在使用 org.springframework.cloud.gcp.data.spanner.core.mapping.Table 注释,它只有一个“名称”属性。
    【解决方案2】:

    根据我对SpannerSchemaUtils.java 的研究,使用此类创建二级索引似乎是不可能的。该类仅支持为表生成 DDL 语句;即代码中没有提到处理表index

    这个项目有一个开源的 Github repo;如果您希望对此提供支持,可以在问题跟踪器中提交功能请求:https://github.com/GoogleCloudPlatform/spring-cloud-gcp/issues

    【讨论】:

      猜你喜欢
      • 2011-07-23
      • 2016-01-03
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多