I have a relationship from 1 to product n to historical, ie a product has several months / historical. How to read the following xml to Object?
<produto>
<descricao>PAVESINO 800X15</descricao>
<valor>2.30</valor>
<historicos>
<historico>
<mesesHistoricos>2009-12-21 18:40:56.281 UTC</mesesHistoricos>
<quantidade>6735</quantidade>
</historico>
<historico>
<mesesHistoricos>2010-01-21 18:40:56.283 UTC</mesesHistoricos>
<quantidade>5940</quantidade>
</historico>
<historico>
<mesesHistoricos>2010-02-21 19:40:56.283 UTC</mesesHistoricos>
<quantidade>4824</quantidade>
</historico>
<historico>
<mesesHistoricos>2010-02-21 19:40:56.283 UTC</mesesHistoricos>
<quantidade>7869</quantidade>
</historico>
<historico>
<mesesHistoricos>2010-02-21 19:40:56.283 UTC</mesesHistoricos>
<quantidade>8152</quantidade>
</historico>
</historicos>
</produto>
Follow the Product table:
@Entity
@Table (name="product") @NamedQueries ({@NamedQuery (name = Product.ALL, query="Select a FROM Product to"), @NamedQuery (name = Product.COUNT, query="select count (a) from Product to"), @NamedQuery (name = Product.DESCRICAO, query="from Product where upper (description) =: description")}) public class Product implements Serializable {
private static final long serialVersionUID = 1L;
public final static String ALL = "produto.populaproduto";
public final static String COUNT = "produto.countprodutoTotal";
public final static String DESCRICAO = "produto.descricao";
private Long codigo;
private Integer Version;
private String codigoProduto;
private String descricao;
private BigDecimal valor;
private List<Historico> historicos = new ArrayList<>();
@OneToMany(mappedBy = "produto", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
public List<Historico> getHistoricos() {
return historicos;
}
public void setHistoricos(List<Historico> historicos) {
this.historicos = historicos;
}
public Produto() {
}
public Produto(String descricao, BigDecimal valor) {
this.descricao = descricao;
this.valor = valor;
}
@Version
public Integer getVersion() {
return Version;
}
public void setVersion(Integer version) {
Version = version;
}
@Id
@GeneratedValue
public Long getCodigo() {
return codigo;
}
public void setCodigo(Long codigo) {
this.codigo = codigo;
}
@NotBlank
@Column(nullable = false, length = 50)
public String getCodigoProduto() {
return codigoProduto;
}
public void setCodigoProduto(String codigoProduto) {
this.codigoProduto = codigoProduto;
}
public void setDescricao(String descricao) {
this.descricao = descricao == null ? null : descricao.toUpperCase().trim();
}
@NotBlank
@Column(nullable = false, length = 100)
public String getDescricao() {
return descricao;
}
@Column(name = "valor", nullable = false, precision = 10, scale = 2)
public BigDecimal getValor() {
return valor;
}
public void setValor(BigDecimal valor) {
this.valor = valor;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Produto other = (Produto) obj;
if (codigo == null) {
if (other.codigo != null)
return false;
} else if (!codigo.equals(other.codigo))
return false;
return true;
}
}
Here is the History table:
@Entity
@Table (name="historical") @NamedQueries ({@NamedQuery (name = Historic.ALL, query="Select a FROM Historic a"), @NamedQuery (name = Historico.COUNT, query="select count (a) from Historico to")}) public class Historical implements Serializable {
private static final long serialVersionUID = 1L;
public final static String ALL = "Historico.populaHistorico";
public final static String COUNT = "Historico.countHistoricoTotal";
public final static String DESCRICAO = "Historico.descricao";
private Long codigo;
private Integer Version;
private Date mesesHistoricos;
private Integer quantidade;
private Produto produto;
@Version
public Integer getVersion() {
return Version;
}
public void setVersion(Integer version) {
Version = version;
}
@Id
@GeneratedValue
public Long getCodigo() {
return codigo;
}
public void setCodigo(Long codigo) {
this.codigo = codigo;
}
@NotNull
@Temporal(TemporalType.DATE)
@Column(name = "meses_historicos", nullable = false)
public Date getMesesHistoricos() {
return mesesHistoricos;
}
public void setMesesHistoricos(Date mesesHistoricos) {
this.mesesHistoricos = mesesHistoricos;
}
@Column(nullable = false, length = 3)
public Integer getQuantidade() {
return quantidade;
}
public void setQuantidade(Integer quantidade) {
this.quantidade = quantidade;
}
@ManyToOne
@JoinColumn(name = "id_produto", nullable = false)
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto2) {
this.produto = produto2;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Historico other = (Historico) obj;
if (codigo == null) {
if (other.codigo != null)
return false;
} else if (!codigo.equals(other.codigo))
return false;
return true;
}
}