Java 在Hibernate多对多关系中使用映射数据结构

Java 在Hibernate多对多关系中使用映射数据结构,java,hibernate,spring-mvc,many-to-many,Java,Hibernate,Spring Mvc,Many To Many,我想知道是否可以在@manytomy关系中使用地图 例如,考虑实体电影和人物: public class Movie implements Serializable { ... @ManyToMany(mappedBy="actor_roles") private Set<Person> cast; ... } 公共类电影实现可序列化{ ... @多人(mappedBy=“演员/角色”) 私人布景演员; ... } 现在是Person.java: publi

我想知道是否可以在@manytomy关系中使用地图

例如,考虑实体电影和人物:

public class Movie implements Serializable {

...

    @ManyToMany(mappedBy="actor_roles")
    private Set<Person> cast;

...
}
公共类电影实现可序列化{
...
@多人(mappedBy=“演员/角色”)
私人布景演员;
...
}
现在是Person.java:

public class Person implements Serializable {

...

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "Person_Movie_Actor", 
             joinColumns = { @JoinColumn(name = "person_id") }, 
             inverseJoinColumns = { @JoinColumn(name = "movie_id") })
    private Set<Movie> actor_roles;

...
}
public类Person实现可序列化{
...
@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinTable(name=“Person\u Movie\u Actor”,
joinColumns={@JoinColumn(name=“person_id”)},
inverseJoinColumns={@JoinColumn(name=“movie\u id”)})
私人设置演员角色;
...
}
问题是我想保留这种多对多关系,但我还想为每部电影保留一个映射[Person==>Role]。我猜是这样的:

@ManyToMany(mappedBy="actor_roles")
private Map<Person, String> cast;
@ManyToMany(mappedBy=“actor\u roles”)
私人地图播送;
这里的字符串类似于“尼奥”、“加杰特探长”、“考利昂老头子”,。。。你明白了

获得这种映射的最佳方法是什么?当然,我可以在Person实体中创建一个新属性

private Map<Movie, String> roles;
私有映射角色;

但这种方法让人觉得我会因为糟糕的设计而复制数据。有什么想法吗?

我认为最好的策略是引入另一个实体(电影、人物、角色)。有,但这只适用于简单类型,如字符串。@nmpg:双重角色怎么样?在我看来,
Map
更有意义。@jabu.10245
embeddedable
也可以用于
@ElementCollection
。@TobiasLiefke是的,很好,没想到这一点。这也许是最好的办法。我将对此进行更深入的研究。使用此地图的缺点是,我没有得到演员X所扮演角色的索引。。根据@jabu.10245建议使用另一个实体似乎给了我这种能力。。这需要仔细考虑。