Google App Engine中的数据存储(3)-键(KEY)

每个实体都具有一个在 App Engine 的所有实体中唯一的键。一个完整的键包含若干条信息,其中包括应用程序 ID、类型和实体 ID。

 

如果类用作关系中的“子”类,则键字段必须为能够代表父实体组的类型:Key 实例或编码为字符串的键值。

 

如果应用程序创建一个新对象,并为其指定了与类型相同(且具有相同父实体组)的另一对象相同的字符串 ID,则保存该新对象时将覆盖数据存储区中的另一对象。要在创建新对象前检测字符串 ID 是否已经被使用,您可以使用事务尝试获取具有指定 ID 的实体,如果该实体不存在,则您可以继续创建。

 

主键字段有 4 种类型:

1. 长整型 (java.lang.Long)

由数据存储区自动生成的实体 ID。

对于没有父实体组、其 ID 应由数据存储区自动生成的对象,请使用此类型。

实例的长整型键字段在该实例保存时填充。

使用方法:

 

		@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
	2.未编码字符串(java.lang.String)
	一个字符串:对象创建时由应用程序提供的实体 ID(“键名”)。
	对于没有父实体组、其 ID 应由应用程序提供的对象,请使用此类型。
	应用程序在保存前将此域设置为所需的 ID。
	使用方法:
		@PrimaryKey
private String name;
	3.Key 实例(com.google.appengine.api.datastore.Key)
	键值包括父实体组(如果有)的键以及应用程序分配的字符串 ID 或系统生成的数字 ID。
	要创建带应用程序分配的字符串 ID 的对象,请创建带有该 ID 的键值并将字段设置为该值。
	要创建带系统分配的数字 ID 的对象,请将键字段留为 null。
	使用方法:
		@PrimaryKey
    		@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;

public void setKey(Key key) {
       
this.key = key;
}
		//使用 KeyFactory 类创建 Key 实例
		Key key = KeyFactory.createKey(Employee.class.getSimpleName(), "Alfred.Smith@example.com");
	        Employee e = new Employee();
        e
.setKey(key);
	4.编码字符串形式的键

与键类似,但值是键的编码字符串形式。

编码字符串键允许您以便携方式编写应用程序且仍可以利用 App Engine 数据存储区实体组。

 

应用程序可以在保存前使用带名称的键填充该值,或将它留为 null。

如果编码的键字段为 null,则将在保存对象时使用系统生成的键填充该字段。

Key 实例和编码字符串表示可以通过 KeyFactory 方法 keyToString() 和 stringToKey() 进行相互转换。

 

使用方法:

@PrimaryKey

	 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
         private String encodedKey;
	当使用编码键字符串时,您可以通过一个额外的字段提供对对象的字符串 ID 或数字 ID 的访问:
	@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
 
private String encodedKey;

   
@Extension(vendorName="datanucleus", key="gae.pk-name", value="true")
   
private String keyName;

   
// OR:

   
@Extension(vendorName="datanucleus", key="gae.pk-id", value="true")
   
private Long keyId;

"gae.pk-name" 字段可以在保存对象前设置为键名称。保存对象时,将使用包括键名称的完整键填充编码键字段。其类型必须为 String。

"gae.pk-id" 字段在对象保存时填充,且无法修改。其类型必须为 Long。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值