Google Cloud Datastore(非Appengine):如何在实体中设置Java集合



我正在使用AppEngine Google Cloud Datastore Java API。我存储来自 Google Cloud 环境外部的实体。

我的 Gradle 依赖项是:

compile('com.google.cloud:google-cloud-datastore:0.8.0-beta')

我想在实体中设置一个列表,但没有方法可以设置集合。目前我正在设置如下值:

/**
 * It returns a Google Datastore Entity from a DTO Entity
 * @param usersKey The Key to use to build the entity
 * @param user The Users entity containing the data to persist
 * @return A Google Datastore Entity from a DTO Entity
 */
public static Entity fromDtoToGoogleEntity(Key usersKey, User user) {
    Entity.Builder builder = Entity.newBuilder(usersKey);
    builder.set(User.FIRST_NAME, user.getFirstName());
    builder.set(User.LAST_NAME, user.getLastName());
    builder.set(User.PASSWORD, user.getPassword());
    builder.set(User.EMAIL, user.getEmail());
    builder.set(User.STRIPE_USER_ID, user.getStripeUserId());
    builder.set(User.COUNTRY, user.getCountry());
    builder.set(User.DESCRIPTION, user.getDescription());
    builder.set(User.USERNAME, user.getUsername());
    builder.set(User.ENABLED, user.isEnabled());       
    return builder.build();
}

没有以下方法:

builder.set(User.USER_ROLES, user.getUserRoles());//userRoles is a List<String>

谁能建议一个方法?到目前为止,唯一的方法是使用逗号分隔的字符串表示形式,并从集合转换为逗号分隔的字符串,反之亦然。

提前谢谢。

米.

您可以使用

以下任一方法 (http://googlecloudplatform.github.io/google-cloud-java/0.8.0/apidocs/com/google/cloud/datastore/BaseEntity.Builder.html) -

set(String name, List<? extends Value<?>> values)
set(String name, String first, String second, String... others)

另请参阅ListValueListValue.Builder

第一个 - 您只需创建一个Value对象列表(例如 StringValue ),并将列表分配给实体上的属性。从本质上讲,将您的List<String>转换为List<StringValue>

第二个是带有String var args 的更简单变体,您可以在其中传递两个或多个字符串。

您也可以考虑使用像Catatumbo(http://catatumbo.io)这样的ORM框架,它负责模型对象的映射。

披露:我是Catatumbo的作者。

最新更新