Hello developers,
I am making an attempt to make a composite id from a onetoone mapping but it gives me an error.
Can anyone help me with this problem.
This are my codes:
Code:
@Entity
@Table(name = "pos_salescashpayment")
@AssociationOverride(name = "cashSalePaymentPk.cashSaleTx", joinColumns =
@JoinColumn(name = "cTransNo"))
public class CashSalePayment implements Serializable {
private CashSalePaymentPk cashSalePaymentPk;
private PaymentType paymentType;
private int refNo;
private double amount;
@EmbeddedId
public CashSalePaymentPk getCashSalePaymentPk() {
return cashSalePaymentPk;
}
public void setCashSalePaymentPk(CashSalePaymentPk cashSalePaymentPk) {
this.cashSalePaymentPk = cashSalePaymentPk;
}
@Transient
public CashSaleTx getCashSaleTx() {
return getCashSalePaymentPk().getCashSaleTx();
}
public void setCashSaleTx(CashSaleTx cashSaleTx) {
this.getCashSalePaymentPk().setCashSaleTx(cashSaleTx);
}
@Column(name = "nAmount")
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
@OneToOne
@JoinColumn(name = "cPayType")
public PaymentType getPaymentType() {
return paymentType;
}
public void setPaymentType(PaymentType paymentType) {
this.paymentType = paymentType;
}
@Column(name = "cRefNo")
public int getRefNo() {
return refNo;
}
public void setRefNo(int refNo) {
this.refNo = refNo;
}
}
Code:
@Embeddable
public class CashSalePaymentPk implements Serializable {
private CashSaleTx cashSaleTx;
@OneToOne(targetEntity=CashSaleTx.class,fetch= FetchType.LAZY)
public CashSaleTx getCashSaleTx() {
return cashSaleTx;
}
public void setCashSaleTx(CashSaleTx cashSaleTx) {
this.cashSaleTx = cashSaleTx;
}
}
Code:
public synchronized CashSalePayment getCashSalePaymentByTransNo(String transNo) {
Session session = PointOfSaleUtil.getSessionFactory().openSession();
session.beginTransaction();
CashSalePayment cashSalePayment = null;
Criteria criteria = session.createCriteria(CashSalePayment.class)
.add(Restrictions.eq("cashSalePaymentPk.cashSaleTx.txNo", transNo));
cashSalePayment = (CashSalePayment) criteria.uniqueResult();
session.close();
return cashSalePayment;
}
and this are the errors :
Code:
May 01, 2012 3:46:59 PM org.hibernate.cfg.annotations.EntityBinder bindTable
INFO: Bind entity com.vg.vmi.dealer.pos.ent.CashSalePayment on table pos_salescashpayment
Initial SessionFactory creation failed.org.hibernate.AnnotationException: Illegal attempt to define a @JoinColumn with a mappedBy association: cashSalePaymentPk.cashSaleTx
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.vg.vmi.dealer.pos.util.PointOfSaleUtil.<clinit>(PointOfSaleUtil.java:54)
at com.vg.vmi.dealer.pos.entmgr.CashSalePaymentManager.getCashSalePaymentByPaymentType(CashSalePaymentManager.java:89)
at com.vg.vmi.dealer.pos.entmgr.CashSalePaymentManager.main(CashSalePaymentManager.java:103)
Caused by: org.hibernate.AnnotationException: Illegal attempt to define a @JoinColumn with a mappedBy association: cashSalePaymentPk.cashSaleTx
at org.hibernate.cfg.Ejb3JoinColumn.buildJoinColumn(Ejb3JoinColumn.java:152)
at org.hibernate.cfg.Ejb3JoinColumn.buildJoinColumns(Ejb3JoinColumn.java:127)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1212)
at org.hibernate.cfg.AnnotationBinder.fillComponent(AnnotationBinder.java:1841)
at org.hibernate.cfg.AnnotationBinder.bindId(AnnotationBinder.java:1878)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1281)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:754)
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:534)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:286)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
at com.vg.vmi.dealer.pos.util.PointOfSaleUtil.<clinit>(PointOfSaleUtil.java:36)
... 2 more
Java Result: 1
Thanks.