이 작업에 도움이 필요합니다.복합 기본 키가있는 개체 삽입
@Entity
public class Pedido implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "ID_PEDIDO")
private Integer idPedido;
@Basic(optional = false)
@NotNull
@Column(name = "FECHA_VENTA")
@Temporal(TemporalType.TIMESTAMP)
private Date fechaVenta;
@Column(name = "FECHA_ENVIO")
@Temporal(TemporalType.TIMESTAMP)
private Date fechaEnvio;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "ESTADO")
private String estado;
@JoinColumn(name = "ID_USUARIO", referencedColumnName = "ID_USUARIO")
@ManyToOne(optional = false)
private Usuario idUsuario;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "pedido")
private Collection<DetPedido> detPedidoCollection;
// Getters and Setters //
이 내 DetPedido 법인입니다 :
public String finalizarCompra() {
Pedido pedido = new Pedido();
pedido.setEstado("almacen");
pedido.setFechaVenta(new Date());
pedido.setIdUsuario(loginBean.getUsuario());
Producto p;
Integer i;
DetPedido detPedido;
List<DetPedido> lista = new ArrayList<>();
for (Map.Entry e : productos.entrySet()) {
detPedido = new DetPedido();
p = (Producto) e.getKey();
i = (Integer) e.getValue();
detPedido.setProducto(p);
detPedido.setCantidad(i);
detPedido.setPrecioUnidad(p.getPrecioUnidad());
detPedido.setPedido(pedido);
lista.add(detPedido);
detPedidoBean.insert(detPedido);
}
pedido.setDetPedidoCollection(lista);
pedidoBean.insert(pedido);
return "";
}
이 내 Pedido의 엔티티입니다 : 코드를 더 분명하다, 이것은 제 기능을 유지하는 것입니다
@Entity
public class DetPedido implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected DetPedidoPK detPedidoPK;
@Basic(optional = false)
@NotNull
@Column(name = "CANTIDAD")
private Integer cantidad;
@Basic(optional = false)
@NotNull
@Column(name = "PRECIO_UNIDAD")
private Double precioUnidad;
@JoinColumn(name = "ID_PRODUCTO", referencedColumnName = "ID_PRODUCTO", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Producto producto;
@JoinColumn(name = "ID_PEDIDO", referencedColumnName = "ID_PEDIDO", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Pedido pedido;
// Getters and Setters //
그리고 이것은 내입니다 DetPedidoPK :
@Embeddable
public class DetPedidoPK implements Serializable {
@Basic(optional = false)
@NotNull
@Column(name = "ID_PEDIDO")
private Integer idPedido;
@Basic(optional = false)
@NotNull
@Column(name = "ID_PRODUCTO")
private Integer idProducto;
// Getters and Setters //
엔티티 ara는 데이터베이스 (DetPedidoPK)에서 자동으로 생성되었으므로 이제는 Pedido를 저장하는 방법을 알지 못합니다. 위의 코드로 시도했지만 작동하지 않습니다.
아무도 도와 줄 수 있습니까?
인사말.
좋아요! JPA 1.0에 대해 설명해 주셨습니다. 감사! 그러나 JPA 2.0을 사용하고 있는데'@ MapsId' 사용법을 모르겠습니다.'@JoinColumn (name = "ID_PRODUCTO", referencedColumnName = "ID_PRODUCTO", insertable = false, updatable = false)'을 '@MapsId ("idProducto")'하지만 작동하지 않는다면 아마도 더 많은 것을 바꿔야 할 것입니다. 다시 한 번 감사드립니다! – Alavaros
비슷한 문제가 있었음 (해결됨) http://stackoverflow.com/questions/20146155/jpa-hibernate-tries-to-store-too-many-parameters-in-entity-with-composite-id-an – razor