Spring Cloud Datastore 嵌入式實體

2024-01-12 09:34 更新

類型也用@Entity注釋的字段將轉換為EntityValue并存儲在父實體中。

這是一個Cloud Datastore實體的示例,其中包含JSON中的嵌入式實體:

{
  "name" : "Alexander",
  "age" : 47,
  "child" : {"name" : "Philip"  }
}

這對應于一對簡單的Java實體:

import org.springframework.cloud.gcp.data.datastore.core.mapping.Entity;
import org.springframework.data.annotation.Id;

@Entity("parents")
public class Parent {
  @Id
  String name;

  Child child;
}

@Entity
public class Child {
  String name;
}

Child實體不是以其自己的類型存儲的。它們?nèi)看鎯υ?code class="literal" i="6229">parents類型的child字段中。

支持多個級別的嵌入式實體。

 嵌入式實體不需要具有@Id字段,只有頂級實體才需要。

例:

實體可以容納自己類型的嵌入式實體。我們可以使用此功能將樹存儲在Cloud Datastore中:

import org.springframework.cloud.gcp.data.datastore.core.mapping.Embedded;
import org.springframework.cloud.gcp.data.datastore.core.mapping.Entity;
import org.springframework.data.annotation.Id;

@Entity
public class EmbeddableTreeNode {
  @Id
  long value;

  EmbeddableTreeNode left;

  EmbeddableTreeNode right;

  Map<String, Long> longValues;

  Map<String, List<Timestamp>> listTimestamps;

  public EmbeddableTreeNode(long value, EmbeddableTreeNode left, EmbeddableTreeNode right) {
    this.value = value;
    this.left = left;
    this.right = right;
  }
}

地圖

地圖將存儲為嵌入式實體,其中鍵值成為嵌入式實體中的字段名稱。這些映射中的值類型可以是任何常規(guī)支持的屬性類型,并且將使用配置的轉換器將鍵值轉換為String。

同樣,可以嵌入實體的集合。寫入時將轉換為ListValue。

例:

代替上一個示例中的二叉樹,我們想在Cloud Datastore中存儲一棵普通樹(每個節(jié)點可以有任意數(shù)量的子級)。為此,我們需要創(chuàng)建一個類型為List<EmbeddableTreeNode>的字段:

import org.springframework.cloud.gcp.data.datastore.core.mapping.Embedded;
import org.springframework.data.annotation.Id;

public class EmbeddableTreeNode {
  @Id
  long value;

  List<EmbeddableTreeNode> children;

  Map<String, EmbeddableTreeNode> siblingNodes;

  Map<String, Set<EmbeddableTreeNode>> subNodeGroups;

  public EmbeddableTreeNode(List<EmbeddableTreeNode> children) {
    this.children = children;
  }
}

由于地圖是作為實體存儲的,因此它們可以進一步保存嵌入式實體:

  • 值中的單個嵌入式對象可以存儲在嵌入式Map的值中。
  • 值中嵌入對象的集合也可以存儲為嵌入Map的值。
  • 值中的映射進一步存儲為嵌入式實體,并對其值進行遞歸應用相同的規(guī)則。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號