WEB开发网
开发学院软件开发Java 使用 Grails 开发 Google App Engine 应用 阅读

使用 Grails 开发 Google App Engine 应用

 2010-06-24 00:00:00 来源:WEB开发网   
核心提示: 清单 6. UserProfile 的 Domain classpackagemulanimportjavax.persistence.*;@EntityclassUserProfileimplementsSerializable{@Id@GeneratedValue(strategy=Gene

清单 6. UserProfile 的 Domain class

 package mulan 
 import javax.persistence.*; 
 @Entity 
 class UserProfile implements Serializable { 
  @Id 
 @GeneratedValue(strategy = GenerationType.IDENTITY) 
 Long id 
…… 
 } 

按照代码清单 5、6 中定义的 User 和 UserProfile 只能够单独维护,没有办法将二者放在同一个事务中进行更新操作。如果要同一个事务中操作关系双方,就必须将被调用方(UserProfile)的主键类型从 Long 变更为 Key,并在其新增的时候将其主键使用 KeyFactory.Builder 生成,从而将 UserProfile 和 User 分配到同一个实体组中。参见清单 7:

清单 7. 将两个实体分配到一个实体组

 UserProfile.withTransaction {     
 Builder keyBuilder = new Builder(User.class.getSimpleName(), 
 currentUser.id) 
 keyBuilder.addChild(UserProfile.class.getSimpleName(), 
 currentUser.id) 
 def userprofile=new UserProfile(params) 
 userprofile.id=keyBuilder.getKey() 
 currentUser.uprofile=keyBuilder.getKey() 
 currentUser.save() 
 userprofile.save() 
 } 

注意上述代码中的 keyBuilder.addChild,这个方法将 UserProfile 的主键跟 User 的主键关联起来。从而使 UserProfile 和 User 处于同一个实体组,但是由于是无主的关系,所以需要显式的对 UserProfile 进行保存。这样创建出来的 UserProfile 在修改 / 删除时,可以跟它相关联的 User 实体在同一个事务中操作,参见如下代码。

上一页  3 4 5 6 7 8 9 10  下一页

Tags:使用 Grails 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接