【发布时间】:2014-04-28 06:38:13
【问题描述】:
我有这个问题
这是我的桌子
这是我的“Compra”代码
@Entity
@Table(name = "compra")
public class Compra implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "codigo", unique = true, nullable = false)
private int codigo;
@ManyToOne
@JoinColumn(name = "codProveedor", nullable = false)
private Proveedor proveedor;
@Column(name = "tipoComprobante", nullable = false)
private String tipoComprobante;
@Temporal(TemporalType.DATE)
@Column(name = "fechaFactura", nullable = false)
private Date fechaFactura;
@Temporal(TemporalType.DATE)
@Column(name = "fechaLlegada", nullable = false)
private Date fechaLlegada;
@Column(name = "serie", nullable = false)
private String serie;
@Column(name = "numero", nullable = false)
private int numero;
@Column(name = "importe", nullable = false)
private double importe;
@Column(name = "vigencia", nullable = false)
private boolean vigencia = true;
@ElementCollection
private List<DetalleCompra> lstDetalle = new ArrayList<DetalleCompra>();
// getters and setters ...
这是我的“DetelleCompra”代码
@Entity
@Table(name = "detalleCompra")
public class DetalleCompra implements Serializable {
@Id
@GeneratedValue(generator = "gen")
@GenericGenerator(name = "gen", strategy = "foreign", parameters = @Parameter(name = "property", value = "compra"))
@Column(name = "codCompra", nullable = false)
private int codCompra;
@ManyToOne
@JoinColumn(name = "codPresentacion", nullable = false)
private Presentacion presentacion;
@Column(name = "imei", nullable = false)
private String imei;
@Column(name = "simcard", nullable = false)
private String simcard;
getters and setters ...
一切看起来都很好,但是当我想保存时,我遇到了这个问题
org.hibernate.TransientObjectException: 对象引用了一个未保存的瞬态实例——在刷新之前保存瞬态实例:DetalleCompra
这很清楚,因为当我想保存 Compra 和 DetalleCompra 时,第二个表需要 fk 值
public void registrar(Compra compra) {
try {
session = HibernateUtil.getSessionFactory().openSession();
trans = session.beginTransaction();
session.save(compra);
trans.commit();
} catch (Exception e) {
trans.rollback();
throw e;
} finally {
session.close();
}
}
好吧,“compra”表的 pk 生成得很好,但是其他表无法识别自动生成的这个值,为什么?,我该如何解决?
【问题讨论】:
-
为什么是“@ElementCollection”而不是“@OneToMany”
-
当我把 onetomany 说成同样的“org.hibernate.TransientObjectException:对象引用了一个未保存的瞬态实例 - 在刷新之前保存瞬态实例:DetalleCompra”
标签: java hibernate jpa jpa-2.0 hibernate-annotations