java - @OneToMany 插入后返回 null
问题描述
我有个问题
在使用 Hibernate 的 Java Web 项目中,我有一个具有 @OneToMany 关系的实体
当我部署站点时,@OneToMany 关系正常工作
保存后,所有内容都正确保存在数据库中,但此新记录的 @OneToMany 返回 null
如果我再次进行部署,那么 @OneToMany 工作
我的小儿科
@Entity
@Table(name = "pedido")
@NamedQueries({
@NamedQuery(name = "pedido.findAll", query = "SELECT p FROM Pedido p")
})
public class Pedido implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "valor_total")
private Double valorTotal;
@ManyToOne
@JoinColumn(name = "usuario_id")
private Usuario usuario;
@OneToMany(mappedBy = "pedido")
private List<ProdutoPedido> produtoPedidos;
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public Double getValorTotal()
{
return valorTotal;
}
public void setValorTotal(Double valorTotal)
{
this.valorTotal = valorTotal;
}
public Usuario getUsuario()
{
return usuario;
}
public void setUsuario(Usuario usuario)
{
this.usuario = usuario;
}
public List<ProdutoPedido> getProdutoPedidos()
{
return produtoPedidos;
}
public void setProdutoPedidos(List<ProdutoPedido> produtoPedidos)
{
this.produtoPedidos = produtoPedidos;
}
}
我的 ProdutoPedido 课程
@Entity
@Table(name = "produto_pedido")
@NamedQueries({
@NamedQuery(name = "produto_pedido.findAll", query = "SELECT pp FROM ProdutoPedido pp")
})
public class ProdutoPedido implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToOne
@JoinColumn(name = "produto_id")
private Produto produto;
@ManyToOne
@JoinColumn(name = "pedido_id")
private Pedido pedido;
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public Produto getProduto()
{
return produto;
}
public void setProduto(Produto produto)
{
this.produto = produto;
}
public Pedido getPedido()
{
return pedido;
}
public void setPedido(Pedido pedido)
{
this.pedido = pedido;
}
}
我的 PedidoB 课
@Named(value = "pedidoB")
@RequestScoped
public class PedidoB
{
@Inject
private PedidoDAO pedidoDAO;
public PedidoB()
{
}
public List<Pedido> getTodosPedidos()
{
return pedidoDAO.getAllResults("pedido.findAll");
}
}
解决方案
我不确定您如何保存实体,但我的猜测是您需要告诉 hibernate 在保存 pedido 时应该将哪些操作级联到子实体。
您所描述的可以通过指定这些来修复
@OneToMany(mappedBy = "pedido", cascade = { PERSIST, MERGE })
推荐阅读
- azure - 从 CircleCI 中的 Azure Artefacts 恢复
- playwright - 使用 Playwright 下载文件
- c# - 无法在 Xamarin 中获取 CheckBox x:Name 错误
- excel - 如何使用 vba 检索内置 excel 函数的完整列表?
- html - 如何让 flex 为 1 的子 div(填充剩余空间)的 flex,使其子级全高
- css - Codenameone:如何在 SpanLabel 中设置 MaxLines 和 MinLines?
- c# - 请WPF DataGrid帮助
- arrays - 将 PyTesseract 识别的图像转换为数组
- excel - 从范围返回单元格内容
- sql - 如何将 SQL Unpivot 查询转换为 HANA SQL?