【发布时间】:2015-06-27 01:27:01
【问题描述】:
我有两个实体ValCurs 和Valute,我正在映射一个远程xml 资源。数据仅针对Valute实体存储在数据库中。
这是我的实体:
ValCurs实体:
@Entity
@Table(name = "valCurs")
@XmlRootElement(name="ValCurs")
@XmlAccessorType(XmlAccessType.FIELD)
public class ValCurs {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@XmlAttribute(name = "Date")
private String date;
@XmlElement(name = "Valute")
private ArrayList<Valute> allValutes;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public ArrayList<Valute> getAllValutes() {
return allValutes;
}
public void setAllValutes(ArrayList<Valute> allValutes) {
this.allValutes = allValutes;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
Valute实体
@Entity
@Table(name = "valute")
@XmlAccessorType(XmlAccessType.FIELD)
public class Valute {
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "char_code")
@XmlElement(name = "CharCode")
private String charCode;
@Column(name = "nominal")
@XmlElement(name = "Nominal")
private Integer nominal;
@Column(name = "value")
@XmlElement(name = "Value")
private Float value;
@Column(name = "name")
@XmlElement(name = "Name")
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCharCode() {
return charCode;
}
public void setCharCode(String charCode) {
this.charCode = charCode;
}
public Integer getNominal() {
return nominal;
}
public void setNominal(Integer nominal) {
this.nominal = nominal;
}
public Float getValue() {
return value;
}
public void setValue(Float value) {
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我是这样解组的:
URL url = new URL(BNM);
InputSource is = new InputSource(url.openStream());
// Converting a XML to java object with JAXB, (UnMarshalling).
JAXBContext jaxbContext = JAXBContext.newInstance(ValCurs.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
ValCurs valCurs = (ValCurs) jaxbUnmarshaller.unmarshal(is);
// Extracting the list of Valutes from the root xml
ArrayList<Valute> listOfValutes = valCurs.getAllValutes();
// Storing data into database
for (Valute valute : listOfValutes) {
valuteService.add(valute);
}
valCursService.add(valCurs);
当我运行代码时,它会抛出一个:could not serialize; nested exception
我可以理解为什么(它不能在表格的一个单元格中序列化:private ArrayList<Valute> allValutes;)。
我需要从ValCurs 获取id 和date,但我无法实现(valCursService.add(valCurs); 抛出异常,因此我无法将数据存储在数据库中。)
我的问题是这样的:我如何将来自ValCurs 的数据存储在一个表中,(也许我在 Jaxb 注释技术中遗漏了一些东西,我在 java 的持久性方面真的很新)。
P.S. 我正在解析的 Xml 是这样的:
<ValCurs Date="20.04.2015" name="Official exchange rate">
<Valute ID="47">
<NumCode>978</NumCode>
<CharCode>EUR</CharCode>
<Nominal>1</Nominal>
<Name>Euro</Name>
<Value>19.3441</Value>
</Valute>
<Valute ID="44">
<NumCode>840</NumCode>
<CharCode>USD</CharCode>
<Nominal>1</Nominal>
<Name>US Dollar</Name>
<Value>18.0558</Value>
</Valute>
</ValCurs>
【问题讨论】:
标签: java xml hibernate spring-mvc jaxb