使用 Grails 开发 Google App Engine 应用
2010-06-24 00:00:00 来源:WEB开发网ToDo 中的关系
User 和 UserProfile 是一对一的关系。但是是有主的还是无主的呢?这个可以根据具体情况而定。
User 和 UserProfile 有主的一对一关系
如果将 User 和 UserProfile 的关系设置为有主的一对一的关系,那么 User 就是 UserProfile 的父实体。父实体(User)的主键为 Long,子实体(UserProfile)的主键为 Key,父实体中可以通过定义一个子实体的字段,在二者之间创建单向的一对一有主关系。User/UserProfile 的 DomainClass 代码参见清单 2、3:
清单 2. User 的 Domain class
package mulan
import javax.persistence.*;
@Entity
class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id
@OneToOne(cascade=CascadeType.ALL)
UserProfile uprofile
……
}
清单 3. UserProfile 的 Domain class
package mulan
import com.google.appengine.api.datastore.Key;
import javax.persistence.*;
@Entity
class UserProfile implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Key id
……
}
处于这种关系下,在新增的时候可以仅对主实体执行 save 操作,参见清单 4:
清单 4. 有主的一对一关系的新增
User.withTransaction {
def userInstance = new User(params)
def userpro = new UserProfile(params)
userInstance.uprofile=userpro
userInstance.save(flush:true)
……
}
更多精彩
赞助商链接