基本 Java MVC:Bean 和具有属性的关联实体

Basic Java MVC: Beans and associative entities with attributes

我正在为这个大学电影数据库项目工作,我需要创建一个基于 java 的网站,以便在巨大的 postgresql 数据库中进行高级搜索。我没有使用休眠或类似工具。这是数据库的 ER 图的一部分:

如您所见,关联实体 actormovie 链接了实体 actor 和 movie,同时还列出了所描绘的角色。我创建了两个简单的 bean,Actor 和 Movie,带有属性、getter 和 setter。

这是我第一个 java 专注于 MVC 的 Web 项目,所以我有点迷茫。我的问题是:我应该创建一个映射关联 table 的 bean 吗?如果不是,我该如何处理 as_character 属性?

不,你不需要。 class 演员将有一个电影列表,而电影 class 将有一个演员列表。就像这样映射。

对于角色属性,您可以在 Actor class 中创建一个映射,其中键是电影,值是角色(或角色列表,因为演员可以有同一部电影中的许多角色):

Map<Movie, List<String>> characters = new HashMap<>()

答案是肯定的。
这是因为Actor->Movie这个relation有属性as_character,你也可以想办法不做class,但是时间长了会出问题(可能有些由于您忘记了它或其他人不知道它而创建的愚蠢错误,这是您不想处理的事情)。
如果这是您的第一种方法,我认为可能会让您感到困惑的是如何表示这种关系。
大多数时候,第一个想到的方法是让 ActorMovie class 像:

public class ActorMovie {
    Integer actor_id;
    Integer movieid;
    String as_character;

    //getters, setters, equals, hashCode, toString
}

但您也可以将其视为 Actor(或 Movie)的 ,并使其像:

public class ActorMovie {
    Integer movieid;
    String as_character;

    //getters, setters, equals, hashCode, toString
}

和一个Actor class:

public class Actor {
    Integer actor_id;
    String name;
    String sex;
    Set<ActorMovie> movies;

    //getters, setters, equals, hashCode, toString
}

它们都解决了问题,它们只是改变了您通过代码与这些数据交互的方式,为了了解什么时候使用一个或另一个更好,您必须尝试两者,看看有什么变化,所以选择什么你感觉更多 "natural" 并看到结果。

这取决于您的项目将如何发展。如果您没有使用对象关系映射(如您在问题中所述),则应该为关联 table 创建 bean 映射。如果后面要引入Object Relational Mapping,那么Actor可以拥有as_character 属性,那么就不要为associative table创建bean mapping了。