Hibernate如何处理多个实体关系?

时间:2016-01-15 15:42:07

标签: java spring hibernate

我有一个包含此数据结构的项目:

@Entity
public class User {
    @ManyToMany(fetch=FetchType.EAGER, mappedBy="users", cascade= {CascadeType.PERSIST, CascadeType.REMOVE})
        public List<Project> projects;
}

@Entity
@Table(name = "project")
public class Project {
    @ManyToMany(cascade= {CascadeType.PERSIST, CascadeType.REMOVE})
    public List<User> users;

    @OneToMany(fetch=FetchType.EAGER, mappedBy="project", cascade = {CascadeType.ALL})
public List<Report> reports;

}

@Entity
public class Report {
@ManyToOne(cascade = {CascadeType.ALL})
    @JoinColumn(name = "pid")
    public Project project;
}

如何编写DAO以避免在另一个DAO中使用DAO?具体来说,如果我需要一个方法:

public void createUserReport(int userId) {
}

要确定哪个用户创建了报告,我使用userId属性。此方法现在应该属于UserDAO还是ReportDAO?常识告诉我它将是后者,每个想要创建报告的人都会看到ReportDAO。但如果它是前者,我只能使用一个DAO来创建报告并更新用户,将更新级联到报告。 在后者中,需要单独的UserDAO实例来创建与报告的关系,更不用说中间项目实体了。

一个更简单的例子:

public List<Project> getUserProjects(int userId) {
}

返回Project对象,但是如果放在ProjectDAO中,则需要使用单独的DAO来首先获取User对象。放在UserDAO中它变得更加资源友好,但没有多大意义。

0 个答案:

没有答案