我在这个大学的电影数据库项目中工作,我需要创建一个基于java的网站,在庞大的postgresql数据库中进行高级搜索。我没有使用休眠或类似的工具。以下是数据库ER图的一部分:
如您所见,关联实体actormovie链接实体actor和movie,同时还列出所描绘的角色。我创建了两个简单的bean,Actor和Movie,包含属性,getter和setter。
这是我的第一个专注于MVC的java网络项目,所以我有点失落。我的问题是:我应该创建一个映射关联表的bean吗?如果没有,我该如何处理as_character属性?
答案 0 :(得分:1)
不,你不需要。类Actor将具有Movie列表,Movie类具有Actor列表。就像这样映射。
对于character属性,你可以在Actor类中创建一个地图,其中键是电影,值是字符(或者是一个字符列表,因为一个actor可以在同一部电影中有很多字符):
Map<Movie, List<String>> characters = new HashMap<>()
答案 1 :(得分:1)
答案是肯定的。
这是因为关系Actor-&gt; Movie有一个属性as_character
,你也可以找到一种不做类的方法,但是在很长一段时间它会引起问题(也许是因为你忘了它而创建了一些愚蠢的bug ,或其他人不知道,你不想处理的事情。)
如果这是你的第一个方法,我认为让你感到困惑的是如何表达这种关系
在大多数情况下,首先想到的方法是使用ActorMovie类:
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
类:
public class Actor {
Integer actor_id;
String name;
String sex;
Set<ActorMovie> movies;
//getters, setters, equals, hashCode, toString
}
他们两个都解决了问题,他们只是改变了你通过代码与这些数据交互的方式,了解何时更好地使用一个或另一个你必须尝试两者并看看有什么变化,所以选择你的感受更“自然”并看到结果。
答案 2 :(得分:1)
这取决于您的项目将如何发展。如果不使用对象关系映射(如问题中所述),则应为关联表创建bean映射。如果稍后将介绍对象关系映射,那么Actor可以拥有as_character属性,那么就不应该为关联表创建bean映射。