使用Play Framework和JPA加入两个表

Omi*_*deh 5 java sql jpa join playframework

如何使用java play框架和jpa连接两个表,我真的很难将我的MySQL查询转换为jpa查询.

这是我在旧Java代码中使用的MySQL查询:

SELECT * FROM tbl_majors
INNER JOIN tbl_lookup_user_major
ON tbl_majors.id=tbl_lookup_user_major.majorId
WHERE tbl_lookup_user_major.userId=12
Run Code Online (Sandbox Code Playgroud)

//表格1:

@Entity
@Table(name="tbl_majors")
public class Major extends Model {
    public Major(){

    }
    @Column(name="major_name")
    private String name;
    @Column(name="major_desc")
    private String description;
}
Run Code Online (Sandbox Code Playgroud)

//表2

@Entity
@Table(name="tbl_lookup_user_major")
public class LookupUserMajor extends Model {
    public LookupUserMajor(){

    }
    private int majorId;
    private int userId;
}
Run Code Online (Sandbox Code Playgroud)

jhi*_*ice 2

不知道我是否明白这里的确切要点,但在教程博客“YABE”中,这种连接表是由 Play 自动使用和创建的:

http://www.playframework.org/documentation/1.2.4/guide6#tagging

模型中描述了多对多关系(博客示例中的“Post”和“Tag”之间):

@ManyToMany(cascade=CascadeType.PERSIST)
public Set<Tag> tags;

public Post(User author, String title, String content) {
    ...
    this.tags = new TreeSet<Tag>();
    ...
    this.title = title;
    this.content = content;
    ...
}
Run Code Online (Sandbox Code Playgroud)

帖子数据的 YAML 是:

Post(jeffPost):
    title:          The MVC application
    postedAt:       2009-06-06
    author:         jeff
    tags:           
                    - play
                    - architecture
                    - mvc
Run Code Online (Sandbox Code Playgroud)

运行应用程序后,我检查数据库,并自动创建表“post_tag”,并且两个表之间的所有链接均已完成(post_ids 和tags_ids 已填充)。

检索数据似乎很简单:

"select distinct p from Post p join p.tags as t"
Run Code Online (Sandbox Code Playgroud)

有人可以证实吗?因为刚接触 Java 和 JPA,所以玩一下 ^^

如果这是正确的,那么看起来比“手动”管理连接表更容易。