2017-06-17 16 views
1

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

enter image description here基本的Java MVC:具有属性的豆子和关联实体

正如您所看到的,关联实体actormovie链接实体actor和movie,同时列出描述的字符。我创建了两个简单的Bean,Actor和Movie,它们具有属性,getter和setter。

这是我第一个关注MVC的java web项目,所以我不仅仅有点迷失方向。我的问题是:我应该创建一个映射关联表的bean吗?如果不是,我该如何处理as_character属性?

回答

1

答案是肯定的。
这是因为Actor-> 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 
} 

他们都解决了这些问题,他们只是改变你将如何通过代码与这些数据进行交互,以了解何时更好地使用这两种数据,你必须尝试两种方法并查看哪些变化,所以选择你感觉更多的东西“自然”并看到结果。

+0

对我有意义。不知怎的,有这样的事情而不是引用id是错的吗? '公开课演员电影{ 演员演员; 电影电影; String as_character; // getters,setters,equals,hashCode,toString }' – Panque

+0

好吧,我喜欢它。谢谢。 – Panque

+0

是的,它也可以是一个解决方案!如果你使用'Movie',那么改变是因为有权访问'ActorMovie'的人可以调用电影的设置者,所以你可以加载一个ActorMovie,然后你可以做一些像'actorMovie.getMovie()。setName (“别的东西”)'。您在选择使用什么时需要考虑它(为了更好地解释关于总体设计模式的一些搜索) – rascio

1

不,你不需要。类Actor将有一个Movie的列表,而Movie类是Actor的列表。就像这样映射。

对于字符属性,您可以在Actor类中创建映射,其中键是影片,值是字符(或者是字符列表,因为演员可以有多个字符电影):

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

+0

“as_character”属性如何? – Panque

+0

查看编辑答案 – BrunoDM

+0

这是一个优雅的解决方案,我认为与我接受的解决方案相比,我会一直处理来自两个实体的数据更难。谢谢你的回复,我肯定了解了一两件事情。 – Panque

1

这取决于您的项目将如何发展。如果您不使用对象关系映射(如您在问题中所述),则应该为关联表创建Bean映射。如果稍后将介绍Object Relational Mapping,那么Actor可以拥有as_character属性,那么不应该为关联表创建bean映射。

相关问题