将数据从Web服务调用保存到数据库

时间:2016-05-02 15:42:14

标签: java spring hibernate soap spring-boot

我的项目正在与SOAP Web服务进行通信,并且有一堆来自wsdl文件的自动生成的类。

当我进行webservice调用时,我想将响应中的信息保存到数据库中,但我想尽可能少地编写样板代码,并且我不想复制所有属性,getter和setter ,来自webservice类。

我想做的事情是这样的(过于简化):

WebserviceClass[] foo = WebserviceCall.getFoos();
for (WebserviceClass bar : foo){
    db.save(bar);
}

我的项目是在Spring Boot中,所以我一直在看Spring Data,Hibernate等,但我找到的所有解决方案都要求我编写很多自己的类,然后从Webservice类中实例化(这需要一个很多重复的属性,getter和setter)。

有没有办法从自动生成的类或wsdl文件构建架构?我可以编写映射而不必基本上重写所有的Web服务类吗?

这似乎是一个已解决的问题,但我还没有找到解决方案。有什么我想念的吗?什么是最佳实践?

1 个答案:

答案 0 :(得分:0)

您可以使用@AttributeOverride扩展生成的类并使用JPA映射它们。

@Entity(name="EVENT")
@AttributeOverrides( { @AttributeOverride( name="id", column=@Column(name="EVENT_ID",nullable=false)),
    @AttributeOverride( name="name", column=@Column(name="EVENT_NAME",nullable=false,length =50)),
    @AttributeOverride( name="date", column=@Column(name="EVENT_DATE_UTC", nullable=false)),
    @AttributeOverride( name="dateLocal", column=@Column(name="EVENT_DATE_LOCAL", nullable=false)),
    @AttributeOverride( name="state", column=@Column(name="STATE",nullable=false)),
    @AttributeOverride( name="operator", column=@Column(name="OPERATOR")),
    @AttributeOverride( name="deviceId", column=@Column(name="DEVICE_ID",nullable=false)),
    @AttributeOverride( name="deviceType", column=@Column(name="DEVICE_TYPE")),
    @AttributeOverride( name="deviceDescription", column=@Column(name="DEVICE_DESCRIPTION")),
    @AttributeOverride( name="description", column=@Column(name="EVENT_DESCRIPTION")),
    @AttributeOverride( name="priority", column=@Column(name="PRIORITY",nullable=false)),
    @AttributeOverride( name="attachment", column=@Column(name="ATTACHMENT")),
    @AttributeOverride( name="mimeType", column=@Column(name="MIME_TYPE")),
})
public class DbClass extends GeneratedClass {

    public DbClass(GeneratedClass generatedClass) {
        this.setName(generatedClass.getName());
        this.setDateLocal(generatedClass.getDateLocal());
        ...
    }


    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Override
    public long getId() {
        return super.getId();
    }

    public void setId(long id) {
        super.setId(id);
    }

然后在DbClass上使用spring数据存储库:

springDataRepository.save(new DbClass(generatedClass));

这不是一个非常干净的方法,但它的工作原理。