1
我不能够正确地映射即使按照提供的所有步骤: https://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column-annotation/许多-to-many关联与额外的列
CREATE TABLE `tb_pla_playlist` (
`id_playlist` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`nm_playlist` VARCHAR(10) NOT NULL,
PRIMARY KEY (`id_playlist`) USING BTREE,
)
CREATE TABLE `tb_mid_midia` (
`id_midia` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`nm_midia` VARCHAR(10) NOT NULL,
PRIMARY KEY (`id_midia`) USING BTREE
)
CREATE TABLE `tb_mip_midia_playlist` (
`id_midia` INT(10) UNSIGNED NOT NULL,
`id_playlist` INT(10) UNSIGNED NOT NULL,
`nr_ordem` INT(10) UNSIGNED NOT NULL,
`CREATED_BY` VARCHAR(10) NOT NULL,
PRIMARY KEY (`id_midia`,`CATEGORY_ID`),
CONSTRAINT `FK_id_midia` FOREIGN KEY (`id_midia`)
REFERENCES `midia` (`id_midia`),
CONSTRAINT `FK_id_playlist` FOREIGN KEY (`id_playlist`)
REFERENCES `playlist` (`id_playlist`)
)
playlist.java
@Entity
@Table(name="tb_pla_playlist")
public class Playlist implements Serializable {
private Set<MidiaPlaylist> midiaPlaylist = new HashSet<MidiaPlaylist>();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id_playlist")
private Long idPlaylist;
@OneToMany(mappedBy = "id.playlist", cascade = CascadeType.ALL)
private Set<MidiaPlaylist> getMidiaPlaylist(){
return midiaPlaylist;
}
...
}
[埃罗:在属性'midiaPlaylist',“映射”值'id.playlist'无法解析为目标实体上的属性。]
midia.java
@Entity
@Table(name="tb_mid_midia")
public class Midia implements Serializable {
private Set<MidiaPlaylist> midiaPlaylist = new HashSet<MidiaPlaylist>();
@Id
@GeneratedValue
@Column(name="id_midia")
private Long idMidia;
@OneToMany(mappedBy = "id.midia", cascade=CascadeType.ALL)
public Set<MidiaPlaylist> getMidiasPlaylist() {
return midiaPlaylist;
}
[埃罗:在属性 'midiasPlaylist',值 'id.midia' “由映射” 不能被解析到目标实体的属性]
MidiaPlaylistPK.java
@Embeddable
public class MidiaPlaylistPK implements Serializable {
private Midia midia;
private Playlist playlist;
@ManyToOne(cascade = CascadeType.ALL)
public Midia getMidia(){
return midia;
}
public void setMidia(Midia midia){
this.midia = midia;
}
@ManyToOne(cascade = CascadeType.ALL)
public Playlist getPlaylist(){
return playlist;
}
public void setPlaylist(Playlist playlist){
this.playlist = playlist;
}
}
MidiaPlaylist.java
@Entity
@Table(name="tb_mip_midia_playlist")
@AssociationOverrides({
@AssociationOverride(name="id.playlist", [erro: Persistent type of override attribute "id.playlist" cannot be resolved]
joinColumns = @JoinColumn(name = "id_playlist")),
@AssociationOverride(name="id.midia", [erro: Persistent type of override attribute "id.midia" cannot be resolved]
joinColumns = @JoinColumn(name = "id_midia"))
})
public class MidiaPlaylist implements Serializable {
private MidiaPlaylistPK id = new MidiaPlaylistPK();
private int nrOrdem;
@EmbeddedId [erro: Embedded ID class should not contain relationship mappings]
public MidiaPlaylistPK getId() {
return this.id;
}
@Column(name="nr_ordem", nullable=false)
public int getNrOrdem(){
return this.nrOrdem;
}
@Transient
public Midia getMidia(){
return getId().getMidia();
}
@Transient
public Playlist getPlaylist(){
return getId().getPlaylist();
}
有人可以帮我解决这些错误吗?泰!
我有映射的经验非常少。我不明白为什么会出现这些错误。我需要在媒体和播放列表之间创建ManyToMany关系。有没有简单的方法来做到这一点?在MapId上搜索,显然它做了一个ManyToOne映射,在这种情况下,我需要带有多列的ManyToMany。 [链接](http://www.thejavageek.com/2014/09/26/jpa-mapsid-example/) –
谢谢你帮助我。那会是解决方案吗? \t“ '@MapsId( ”midia“) \t众长getMidia(){ \t \t回报的getId()getIdMidia()。 \t} \t \t @MapsId( “播放列表”) \t众长getPlaylist(){ \t \t回报的getId()getIdPlaylist()。 \t} \t \t @ManyToOne Midia midia; \t \t @ManyToOne播放列表播放列表; \t \t \t @Column(名称= “nr_ordem”,可为空=假) \t公众诠释getNrOrdem(){ \t \t返回this.nrOrdem; \t} –
在当前的例子中,是的,它是ManyToOne映射(它只显示如何使用MapsId的anotation),但在你的情况下,你将有两个MapsId,你会得到你想要的。 –