Hi!
I've some trouble with a OneToOne mapping. It's just like:
Code:
public class VoucherOrder {
@Id
@Column(name = "ID_VoucherOrder")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_Id")
public Long getId() {
return id;
}
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
public OrderSupplement getDetails() {
return details;
}
}
public class OrderSupplement {
@Id
@Column(name = "ID_VoucherOrder")
public Long getId() {
return id;
}
}
Pretty much the same like the Heart/Body example from the hibernate documentation. Now if I try to persist a VoucherOrder with an OrderSupplement set, I get this
ids need to set manually error.
In Google's cache (hibernate manually primarykeyjoincolumn), I found an appropriate remark for version 3.1 beta 4, which is no longer stated. Seems like Hibernate doesn't realize that the ID should be taken from the voucherorder.
It seems to me that this is a rather common situation, so does anybody have an idea how I can let Hibernate handle this? Sure, I may save the order first and afterwards set the supplement, but I don't like that...
Sebastian
Hibernate version: Hibernate Annotations Version: 3.1beta9
Code between sessionFactory.openSession() and session.close(): OrderSupplement oS = new OrderSupplement();
oS.setText("Blabla");
VoucherOrder v = new VoucherOrder();
v.setAmount(new BigDecimal("12.34"));
v.setCurrency("EUR");
v.setDetails(oS);
session.save(v);
Full stack trace of any exception that occurs:Exception in thread "main" org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): net.paybox.voucher.oi.OrderSupplement
at org.hibernate.id.Assigned.generate(Assigned.java:33)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:98)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:506)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:498)
at org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:134)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:437)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:326)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:180)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:534)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:522)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)
at net.paybox.voucher.oi.TestVouchers.testCreate(TestVouchers.java:38)
at net.paybox.voucher.oi.TestVouchers.main(TestVouchers.java:18)
Name and version of the database you are using:HSQLDB 1.8.0
The generated SQL (show_sql=true):%
Debug level Hibernate log excerpt:%
Code: