我正在使用非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)
另请参阅ListValue
和ListValue.Builder
。
第一个 - 您只需创建一个Value
对象列表(例如 StringValue
),并将列表分配给实体上的属性。从本质上讲,将您的List<String>
转换为List<StringValue>
。
第二个是带有String
var args 的更简单变体,您可以在其中传递两个或多个字符串。
您也可以考虑使用像Catatumbo(http://catatumbo.io)这样的ORM框架,它负责模型对象的映射。
披露:我是Catatumbo的作者。