lishunli / nutz

Automatically exported from code.google.com/p/nutz

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

dao: 一对一和一对多的问题

GoogleCodeExporter opened this issue · comments

如:
我现在有两个表:
---------------
表一:user
字段:
username,
role_id
--------------
表二:role
字段:
id,
rolename
---------------------
id和role_id关联

========================
pojo:
userEntity{
    @Column
    private Integer role_id;

    @One(target = roleEntity.class, field = "role_id") 
    private roleEntity role;
}
-------------------
roleEntity{
    省略。。。
}
=======================
现在我要查出的内容:
rolename,username
rolename,username
rolename,username
rolename,username
rolename,username
----------------------

这么个列表
我要用哪个方法?
早doc里实在没看到啊
dome里也没有

doc里应该写下

不知道怎么用

还有
dome应该加点
一对多
多对一
的影视,这样及时没看懂说明文档,
看dome也懂了。

Original issue reported on code.google.com by zozoh...@gmail.com on 27 Apr 2010 at 1:18

List<UserEntity> users = dao.query(UserEntity.class, null, null);  // 获取 
所有的 User
for(UserEntity u : users)
     dao.fetchLinks(u, "role");             // 获取没个 User 的 role 字段

// 循环打印
for(UserEntity u : users)
    System.out.printf("%s, %s\n", u.getRole().getName(),  u.getName());

Original comment by zozoh...@gmail.com on 27 Apr 2010 at 1:22

  • Added labels: ****
  • Removed labels: ****
当然如果仅仅是为了获得 role 
的名称,更好一点的办法是采用视图

===================================================
第一步: 创建视图
CREATE VIEW  v_user AS
      SELECT *, rnm=(SELECT roleName FROM role WHERE role.id = u.id)
      FROM user AS u;

===================================================
第二步: 修改 UserEntity 为:

@Table("user")       //  数据表,更新,删除,插入,将操作它
@View("v_user")    // 声明了 @View, 查询操作将操作这个视图
public class UserEntity{
    @Column
    private Integer role_id;

    @One(target = roleEntity.class, field = "role_id") 
    private roleEntity role;

        @Column("rnm")
        @Readonly                 // 声明了这个注解, 更新,插入操作将忽略这个字段
        private String roleName;
}

===================================================
第三步: 查询 UserEntity 时自然会得到 RoleName


List<UserEntity> users = dao.query(UserEntity.class, null, null);  // 获取 
所有的 User
// 循环打印
for(UserEntity u : users)
    System.out.printf("%s, %s\n", u.getRoleName(),  u.getName());


=========================================================

相关 wiki 为:  http://code.google.com/p/nutz/wiki/dao_view

Original comment by zozoh...@gmail.com on 27 Apr 2010 at 1:31

  • Added labels: ****
  • Removed labels: ****
等创建了相关的 Demo ,这个 Issue 可以设为 WontFix

Original comment by zozoh...@gmail.com on 27 Apr 2010 at 1:32

  • Added labels: ****
  • Removed labels: ****
真对这种情况,写两个 Demo,一个用 View 一个用 自定义 SQL

Original comment by zozoh...@gmail.com on 27 Apr 2010 at 1:51

  • Added labels: ****
  • Removed labels: ****

Original comment by wendal1985@gmail.com on 13 May 2010 at 10:25

  • Added labels: Module-Dao
  • Removed labels: ****