2017-07-18 38 views
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(); 
} 

Relational model

有人可以帮我解决这些错误吗?泰!

回答

1

您应该删除@ManyToOne anotation在@Embeddable,并使用@MapId anotation insted的的@Transient,这里有个例子: http://www.objectdb.com/api/java/jpa/MapsId

+0

我有映射的经验非常少。我不明白为什么会出现这些错误。我需要在媒体和播放列表之间创建ManyToMany关系。有没有简单的方法来做到这一点?在MapId上搜索,显然它做了一个ManyToOne映射,在这种情况下,我需要带有多列的ManyToMany。 [链接](http://www.thejavageek.com/2014/09/26/jpa-mapsid-example/) –

+0

谢谢你帮助我。那会是解决方案吗? \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} –

+0

在当前的例子中,是的,它是ManyToOne映射(它只显示如何使用MapsId的anotation),但在你的情况下,你将有两个MapsId,你会得到你想要的。 –

相关问题