【发布时间】:2013-01-04 12:19:06
【问题描述】:
上图显示了表之间的关系。
AddressType 表包含静态值,例如 mailing、home、work 等。
在 AddressTypeRel 模型类中,我有一个带有多对一注释的 AddressType 对象
AddressTypeRel.java
public class AddressTypeRel implements java.io.Serializable{
.......
private AddressType addressType=new AddressType();
.......
@ManyToOne()
@LazyCollection(LazyCollectionOption.FALSE)
@JoinColumn(name="typeId", insertable=false, updatable=false, nullable=false)
@NotFound(action = NotFoundAction.IGNORE)
public AddressType getAddressType() {
return addressType;
}
public void setAddressType(AddressType addressType) {
this.addressType = addressType;
}
......
}
保存到 Address 表后,我还应该保存 type(mailing/billing) 地址和 addressId 进入 AddressTypeRel 但我无法保存。当我尝试保存时
AddressTypeRel addressTypeRel=new AddressTypeRel();
addressTypeRel.setAddressId(i) //i=5 for example
addressTypeRel.setTypeId(j) //j=4 for example
hibernatetemplate.save(addressTypeRel);
发生的错误是:
对象引用了一个未保存的瞬态实例 - 保存瞬态 刷新前的实例:com.sample.AddressType
【问题讨论】:
-
AddressType是否也在hibernatetemplate.save(addressTypeRel);之前保存。在我看来,您试图指向未保存在数据库中的地址类型(此处为:addressTyperel.setTypeId(j);)ID。 -
@mardavi 实际上 AddressType 表已经包含值。它是一个静态表,有各种地址类型 1.mailing、2.home 等。我们只是将 AddressType 表的 Ids 保存到 AddressTypeRel
-
从您的问题来看,您将一个表列映射到两个属性并不明显(即
int getTypeId()和AddressType getAddressType都指向typeId列),请解决这个问题。
标签: hibernate