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

时间:2017-01-08 20:35:25

标签: google-cloud-datastore

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

我的Gradle依赖是:

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

我在实体中有一个List,我想在Entity中设置但是没有设置集合的方法。目前我设置的值如下:

/**
 * 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>

有人可以建议吗?到目前为止,唯一的方法是使用逗号分隔的String表示形式,并将Collection从Collection转换为逗号分隔的String,反之亦然。

提前致谢。

微米。

1 个答案:

答案 0 :(得分:1)

您可以使用以下任一方法(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的作者。