基本 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了。
我正在为这个大学电影数据库项目工作,我需要创建一个基于 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了。