Hibernate many-many relation does persist to DB

10 views
Skip to first unread message

Edward F Sinaga

unread,
Apr 5, 2012, 10:57:00 PM4/5/12
to jug-in...@yahoogroups.com, jug-b...@googlegroups.com, netbeans-...@yahoogroups.com, Edward Fernando
Halo semua,

saya mau bertanya ttg relasi many-to-many di hibernate.
sy punya relasi sbb, dmn di table SnsTokenMessage memiliki kolom tambahan articleId.

SnsMessage <------- SnsTokenMessage -------> SnsToken

ketika ingin menyimpan SnsTokenMessage, kenapa tidak bisa ya?
konfigurasi yg sy buat ini mengikuti tutorial disini, dan aneh nya tidak bisa. Apa karena versi hiberate / library?
tidak ada exception / error yg terjadi. Berikut snippet code yg saya punya

SnsMessage snsMessage = snsMessageDao.findById(messageId);
for (SNSMasterDTO dto : listDto) {
if(dto.getState()){
String snsName = dto.getName();
String message = snsMessage.getMessageText();

String articleId = "";
String storedToken = dto.getStoredToken();
SnsToken snsToken = snsTokenDao.findByToken(storedToken);
articleId = .... ambil article ID
SnsTokenMessage snsTokenMessage = new SnsTokenMessage();
snsTokenMessage.setSnsToken(snsToken);
snsTokenMessage.setSnsMessage(snsMessage);
snsTokenMessage.setArticleId(articleId);
snsMessage.getSnsTokenMessages().add(snsTokenMessage);
}
}
snsMessageDao.update(snsMessage); //update snsMessage. Tetapi kenapa SnsTokenMessage tidak di save oleh hibernate?
------------------------------------------------------------------------------------------------------------
@NamedQueries({
@NamedQuery(name = "findSnsMessageByClient", query = "select snsMessage from SnsMessage snsMessage where snsMessage.content.id = :id")
})
@Entity
@Table(name="SNS_MESSAGE")
public class SnsMessage extends Model {
@OneToMany(mappedBy = "pk.snsMessage", fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Set<SnsTokenMessage> snsTokenMessages = new HashSet<SnsTokenMessage>();

...getter setter
------------------------------------------------------------------------------------------------------------
@Entity
@Table(name="SNS_TOKEN")
public class SnsToken extends Model {
@OneToMany(mappedBy = "pk.snsToken", fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
  @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Set<SnsTokenMessage> snsTokenMessages = new HashSet<SnsTokenMessage>();

...getter setter

}
------------------------------------------------------------------------------------------------------------
@Entity
@Table(name = "SNS_TOKEN_MESSAGE")
@AssociationOverrides({
@AssociationOverride(name = "pk.snsToken", joinColumns = @JoinColumn(name = "SNS_TOKEN_ID")),
@AssociationOverride(name = "pk.snsMessage", joinColumns = @JoinColumn(name = "SNS_MESSAGE_ID"))
})
public class SnsTokenMessage {

@EmbeddedId
private SnsTokenMessagePK pk = new SnsTokenMessagePK();
@Column(name = "ARTICLE_ID")
private String articleId;
...getter setter PK & articleID
@SuppressWarnings("unused")
@Column(name="SNS_TOKEN_ID", nullable=false, updatable=false, insertable=false)
private Long snsToken;
@SuppressWarnings("unused")
@Column(name="SNS_MESSAGE_ID", nullable=false, updatable=false, insertable=false)
private Long snsMessage;
@Transient
public SnsMessage getSnsMessage(){
return getPk().getSnsMessage();
}
public void setSnsMessage(SnsMessage snsMessage){
getPk().setSnsMessage(snsMessage);
}
@Transient
public SnsToken getSnsToken(){
return getPk().getSnsToken();
}
public void setSnsToken(SnsToken snsToken){
getPk().setSnsToken(snsToken);
}
@Embeddable
private static class SnsTokenMessagePK implements Serializable{

private static final long serialVersionUID = 5780675182250949350L;

@ManyToOne(fetch = FetchType.EAGER)
private SnsToken snsToken;
@ManyToOne(fetch = FetchType.EAGER)
private SnsMessage snsMessage;

...getter setter 
}
}

All the Best,
Edward F Sinaga
Email : edwar...@gmail.com
Mobile : +62-817-211431 / +62-813-22133660

Be Creative, Be Rich!
Reply all
Reply to author
Forward
0 new messages