Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

多对多 #546

Closed
lzf715 opened this issue Nov 5, 2013 · 4 comments
Closed

多对多 #546

lzf715 opened this issue Nov 5, 2013 · 4 comments
Assignees
Milestone

Comments

@lzf715
Copy link

lzf715 commented Nov 5, 2013

@Table("test_book")
public class PaperGroup extends IdEntity {
    @Name
    private String no;
    private String title;
    private String memo;
    private String creator;
    private String introduction;
    private Date createdTime;
    private String branch;
    private int orderNum;
@ManyMany(target = Paper.class, relation = "test_book_paper", from = "bookNo", to = "paperId", key = "no")
    private List<Paper> papers;

}
public class Paper extends IdEntity {
    @Name
    private String no;
    private String name;
    private String yearly;
    private Date createdTime;
    private Date modifiedTime;
    private int modifiedCount;
    private String status;
    @Many(target = PaperQuestion.class, field = "paperId")
    private List<Question> questions;
}

中间表:id,bookNo,paperid

List<PaperGroup> groupList = this.query(Cnd.where("status", "=",
                Constants.STATUS_VALID));
for (int i = 0; i < groupList.size(); i++) {
            dao().fetchLinks(groupList.get(i), "papers");
        }
}

执行的sql

2013-11-05 10:08:50 DEBUG [http-9191-1] SELECT * FROM test_paper  WHERE id IN (SELECT paperId FROM test_book_paper WHERE bookNo=1)
2013-11-05 10:08:50 DEBUG [http-9191-1] SELECT * FROM test_paper  WHERE id IN (SELECT paperId FROM test_book_paper WHERE bookNo=2)
2013-11-05 10:08:50 DEBUG [http-9191-1] SELECT * FROM test_paper  WHERE id IN (SELECT paperId FROM test_book_paper WHERE bookNo=3)
2013-11-05 10:08:50 DEBUG [http-9191-1] SELECT * FROM test_paper  WHERE id IN (SELECT paperId FROM test_book_paper WHERE bookNo=4)
2013-11-05 10:08:50 DEBUG [http-9191-1] SELECT * FROM test_paper  WHERE id IN (SELECT paperId FROM test_book_paper WHERE bookNo=5)
2013-11-05 10:08:50 DEBUG [http-9191-1] SELECT * FROM test_paper  WHERE id IN (SELECT paperId FROM test_book_paper WHERE bookNo=6)
@zozoh
Copy link
Member

zozoh commented Nov 5, 2013

你的问题是什么?

@lzf715
Copy link
Author

lzf715 commented Nov 5, 2013

设置的key是no 实际还是通过id对应的

@ghost ghost assigned zozoh Nov 6, 2013
@zozoh
Copy link
Member

zozoh commented Nov 6, 2013

哦,请参看 @ManyMany 注解的说明

默认的优先会采用 @Id 来对应

但是,我们虽然实现了,但是没有写在文档里,你可以

@ManyMany(target = Paper.class, 
                    relation = "test_book_paper", 
                    from = "bookNo:no", 
                    to = "paperId")
private List<Paper> papers;

来指定 bookNo 的 Java 字段是 'no' 字段。

无论 from 还是 to 都支持这个用法:

   通过冒号分隔,可以指定 Java 字段的名字

你可以看看相关的逻辑 是怎么实现的就明白了

另,你的 "key" 是没必要的,只有当你的 Java 集合是 Map 的时候,才需要你指定一个 key 是从哪个字段提取的

我会补充这部分内容到文档里,这个 Issue 你别关,到时候我来关

@lzf715
Copy link
Author

lzf715 commented Nov 6, 2013

非常感谢。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants