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