私は中間テーブルを使用して他の2つのテーブル(プレイリストとMidiaPlaylistのMidia)のIDを保存するため、問題があります。多対1/1対多の関係の場合。JPA - 継承されたエンティティが永続化に渡されました多対多
私は別の列でMapIDを使用しているので、私は2つの多対1の関係を作成します。 @EmbeddedId表記を使用してIDの関係を作成します。マッピングタイプは "MERGE"タイプでは解決されません。
テーブルMidia
id_midia
--------
テーブルMidiaPlaylist
id_playlist
id_midia
nr_order
テーブルのプレイリスト
id_playlist
-------
マイPlaylistController
instance.setDtCriacao(new Date(System.currentTimeMillis()));
instance.setQtMidiaTransmissao(dualListMidias.getTarget().size());
instance = playlistBean.salvarPlaylist(referenceValue);
int i = 1;
for(Midia midias : dualListMidias.getTarget()){
MidiaPlaylist midiaPlaylist = new MidiaPlaylist();
MidiaPlaylistPK midiaPlaylistPK = new MidiaPlaylistPK();
midiaPlaylistPK.setIdMidia(midias.getIdMidia());
midiaPlaylistPK.setIdPlaylist(instance.getIdPlaylist());
midiaPlaylist.setPk(midiaPlaylistPK);
midiaPlaylist.setNrOrdem(i++);
midiaPlaylist.setMidia(midias);
midiaPlaylist.setPlaylist(instance);
//playlistBean.salvar(midiaPlaylist);
**midiaPlaylistBean.salvar(midiaPlaylist);** -> error
}
「プレイリスト」テーブルにIDを保存します。私はMidiaPlaylistにMidiaのIDを保存するために作成します。
マイMidiaPlaylistBean
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public MidiaPlaylist salvar(MidiaPlaylist entity){
try{
entity = super.save(entity);
}catch(Exception e){
e.printStackTrace();
}
return entity;
}
マイMidiaPlaylist
@EmbeddedId
private MidiaPlaylistPK pk = new MidiaPlaylistPK();
public MidiaPlaylist(){
}
@MapsId("idMidia")
@ManyToOne
@JoinColumn(name="id_midia", referencedColumnName="id_midia")
private Midia midia;
@MapsId("idPlaylist")
@ManyToOne
@JoinColumn(name="id_playlist", referencedColumnName="id_playlist")
private Playlist playlist;
@Column(name="nr_ordem", nullable=false)
private int nrOrdem;
public Midia getMidia() {
return midia;
}
public void setMidia(Midia midia) {
this.midia = midia;
}
public Playlist getPlaylist() {
return playlist;
}
public void setPlaylist(Playlist playlist) {
this.playlist = playlist;
}
public void setPk(MidiaPlaylistPK id) {
this.pk = id;
}
public MidiaPlaylistPK getPk() {
return this.pk;
}
public void setNrOrdem(int nrOrdem){
this.nrOrdem = nrOrdem;
}
public int getNrOrdem(){
return this.nrOrdem;
}
マイプレイリスト
@Id
@GeneratedValue
@Column(name="id_playlist")
private Long idPlaylist;
@OneToMany(mappedBy = "playlist", cascade=CascadeType.MERGE)
private List<MidiaPlaylist> midiaPlaylist;
--get et setter
コンソールのエラー:永続化するために渡された
デタッチエンティティ:Midia
のマッピングに:私はエラーがだと思うcom.bcm.midia.database.entity.Midia@Id @GeneratedValue @Column(name="id_midia") private Long idMidia; @OneToMany(mappedBy = "midia", fetch = FetchType.LAZY, cascade=CascadeType.MERGE) private List<MidiaPlaylist> midiaPlaylist; --get et setter
このマッピングで多対多を保存する方法を理解できますか? この関係をやり直すのが最善でしょうか? 私はもう何をすべきかわかりません。
[@ManyToMany関係を永続化する方法 - 重複したエントリまたは分離したエンティティ](https://stackoverflow.com/questions/9821914/how-to-persist-manytomany-relation-duplicate-entry-or-detached)の可能な複製-entity) – crizzis
それは重複していない、私はEJBを使用するため、彼らは別の問題です。誰も私に何か解決策を提示できますか? –