我们正在使用Hiberate + Spring + Maven来实现一个大型Web应用程序。
应用程序已分区为多个Maven模块的图形,其中一些模块具有持久性。这些模块在父Web应用程序中组合为maven依赖项。并且其他几个模块在其他应用程序中独立使用。
我有以下结构:
核心模块 包含核心服务和持久性API。
社会模块 它是一个独立的应用程序,具有自己的实体(例如,评论,投票等)服务和持久性API。
社会整合 这应该是社交模块与核心应用程序的粘合,并包含关系实体,持久性,服务和控制器。
webapp 它只是一个带有公共弹簧配置的战争容器,并且取决于所有模块。
我尝试使用Hibernate继承来扩展核心类Project以添加所需的关系,但我没有遇到什么问题,我认为这不是正确的实现。
@Entity
@Table(name = "project")
@Inheritance(strategy = InheritanceType.JOINED)
public class Project implements Serializable
{
.....
}
@Entity
@Table(name = "social_project")
@PrimaryKeyJoinColumn(name = "project_id", referencedColumnName = "id")
public class SocialProject extends Project
{
@OneToMany(mappedBy = "project", targetEntity = ProjectComment.class, cascade = CascadeType.ALL)
protected List<Comment> comments = new ArrayList<Comment>(0);
@OneToMany(mappedBy = "project", targetEntity = ProjectQuestion.class, cascade = CascadeType.ALL)
protected List<Question> questions = new ArrayList<Question>(0);
@OneToMany(mappedBy = "project", targetEntity = ProjectEvent.class, cascade = CascadeType.ALL)
protected List<Event> events = new ArrayList<Event>(0);
......
}
那么......我可以在不改变核心应用程序的情况下在这些模块之间创建一个干净的关系吗?
答案 0 :(得分:0)
您可以使用下一个模块更改应用程序的结构:
social-model (or social-schema)
social-dao
social-ws (i.e. web services)
social-runtime (create result jar/war file)
模块之间的依赖关系:
dao depends from model module
ws depends from model and dao modules
runtime depends from all modules
在root pom中声明所有模块。在构建期间,Maven将解析依赖关系并按正确的顺序执行构建:
root,model,dao,ws,runtime
例如,ws模块将从dao模块重用xml Spring配置文件。只需在ws模块的Spring配置中使用import指令。