将XML数据读入关系数据库无法正常工作

时间:2017-10-16 22:29:11

标签: java spring jpa relational-database entities

我正在编写一个java spring应用程序。

在我的应用程序中有两个实体类

......交易对手:

@Entity
@Table(name="Counterparties")
public class Counterparty {

    @Id
    @Column(name="id")
    private int id;

    @Column(name="name")
    private String name;

    //... getters and setters

}

...和交易:

@Entity
@Table(name="Transactions")
public class Transaction {

    @Id
    @Column(name="id")
    private int id;

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="counterparty_id", referencedColumnName="id", nullable=false)
    private Counterparty counterparty;

    @Column(name="market_value", nullable=false)
    private Double marketValue;  

    //... getters and setters

}

应该通过将xml-data读入数据库来填充数据库。

这是一个包含一个交易对手和一个交易的最小xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<DataInput>
    <Counterparty id="1" name="Deutsche Bank"/>
    <Transaction id="1" counterpartyId="1" marketValue="200.00"/>   
</DataInput>

我正在编写一个SAX-Parser来将xml-data读入数据库表。

这是SAXHandler的startElement方法:

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

    if (qName.equalsIgnoreCase("Counterparty")) {

        Counterparty counterparty = new Counterparty();

        int id = Integer.parseInt(attributes.getValue("id"));
        counterparty.setId(id);

        String name = attributes.getValue("name");
        counterparty.setName(name);

        addCounterpartyService.saveCounterparty(counterparty);

    }
    else if (qName.equalsIgnoreCase("Transaction")) {

        Transaction transaction = new Transaction();

        int id = Integer.parseInt(attributes.getValue("id"));
        inputTransaction.setId(id);

        int counterpartyId = Integer.parseInt(attributes.getValue("counterpartyId"));
     ********************************************************************            
        //the following line of code throws an error:
        transaction.setCounterparty(counterpartyId);
     ********************************************************************            

        Double marketValue = Double.valueOf(attributes.getValue("marketValue"));
        transaction.setMarketValue(marketValue);
        addTransactionService.saveTransaction(transaction);

    }

}

我理解为什么这一行会抛出错误的原因: 方法

 transaction.setCounterparty()

需要一个类型为“Counterparty”的参数,但会得到一个类型为“int”的参数。

但是我该怎么办? xml文件包含属性counterpartyId的整数值。

0 个答案:

没有答案