0

Apache camel 正在使用一个正在监听特定 url 的路由。然后将来自该 url 的 json 转换为 pojo 类并插入到 mySQL 数据库中。一切正常,除了我的外键仍然为空。我正在使用弹簧框架顺便说一句。

这是您可以找到数据的网址: https ://builds.apache.org:443/job/Accumulo-1.5/api/json

这是我对骆驼的路线定义

@Component
public class JenkinsConfigurationRouteBuilder extends SpringRouteBuilder {

private Logger logger = LoggerFactory.getLogger(JenkinsConfigurationRouteBuilder.class);

@Override
public void configure() throws Exception {

    logger.info("Configuring route");

    //Properties die hij niet vindt in de klasse negeren
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);

    DataFormat jenkinsConfigFormat = new JacksonDataFormat(objectMapper, JenkinsConfiguration.class);

    from("timer://foo?fixedRate=true&delay=0&period=200000&repeatCount=1")
            .routeId("jsonToJenkinsConfiguration")
            .setHeader(Exchange.HTTP_METHOD, constant("GET"))
            .to("https://builds.apache.org:443/job/Accumulo-1.5/api/json")
            .convertBodyTo(String.class)
            .unmarshal(jenkinsConfigFormat) //instance van JenkinsConfiguration
            .log(LoggingLevel.DEBUG, "be.kdg.teamf", "Project: ${body}")
            .to("hibernate:be.kdg.teamf.model.JenkinsConfiguration");    


    }


}

我的 POJO 课

@Entity(name = "jenkinsConfiguration")
public class JenkinsConfiguration extends Configuration implements Serializable {

@Column
@JsonProperty("displayName")
private String name;

@JsonProperty("healthReport")
@JsonIgnore
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = ("jenkinsConfig"))
private Collection<HealthReport> healthReport;

@JsonProperty("builds")
@JsonIgnore
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = ("jenkinsConfig"))
private Collection<Build> builds;

@JsonProperty("modules")
@JsonIgnore
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = ("jenkinsConfig"))
private Collection<Module> modules;


public JenkinsConfiguration() {
}

public JenkinsConfiguration(Collection<Build> builds, Collection<HealthReport> healthReport, Collection<Module> modules, String name) {
    this.builds = builds;
    this.healthReport = healthReport;
    this.modules = modules;
    this.name = name;
}

public Collection<Build> getBuilds() {
    return builds;
}

public Collection<HealthReport> getHealthReport() {
    return healthReport;
}

public Collection<Module> getModules() {
    return modules;
}

public String getName() {
    return name;
}

public void setBuilds(Collection<Build> builds) {
    this.builds = builds;
}

public void setHealthReport(Collection<HealthReport> healthReport) {
    this.healthReport = healthReport;
}

public void setModules(Collection<Module> modules) {
    this.modules = modules;
}

public void setName(String name) {
    this.name = name;
}

@Override
public String toString() {
    return ToStringBuilder.reflectionToString(this);
}

}

让我们以构建为例。如您所见,这个 pojo 类包含来自构建的列表。一个 JenkinsConfiguration 可以包含更多的构建。一个构建属于一个 JenkinsConfiguration。

这是我的构建类:

@XmlRootElement(name = "builds")
@Entity(name = "build")
public class Build implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int Id;

@Column
@JsonProperty("number")
private Integer number;

@Column
@JsonProperty("url")
private String url;

@JsonBackReference
@OnDelete(action = OnDeleteAction.CASCADE)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "jenkinsConfig")
private JenkinsConfiguration jenkinsConfig;

public Build() {

}

public Build(JenkinsConfiguration jenkinsConfig, Integer number, String url) {
    this.jenkinsConfig = jenkinsConfig;
    this.number = number;
    this.url = url;
}

public int getId() {
    return Id;
}

public JenkinsConfiguration getJenkinsConfig() {
    return jenkinsConfig;
}

public Integer getNumber() {
    return number;
}

public String getUrl() {
    return url;
}

public void setId(int id) {
    Id = id;
}

public void setJenkinsConfig(JenkinsConfiguration jenkinsConfig) {
    this.jenkinsConfig = jenkinsConfig;
}

public void setNumber(Integer number) {
    this.number = number;
}

public void setUrl(String url) {
    this.url = url;
}
}

我的问题:为什么我的外键没有为构建类设置?它仍然为空。我需要手动更新它吗?如果是这样,我该如何在春天做到这一点?

任何帮助我都会非常感激!

4

1 回答 1

1

通过更新我的数据库中的记录来修复它,如下所示:

骆驼:

from("hibernate:be.kdg.teamf.model.Build?delay=1s")
            .routeId("buildFkBuild")
            .startupOrder(3)
            .shutdownRunningTask(ShutdownRunningTask.CompleteAllTasks)
            .to("bean:buildFK?method=processBuild")
            .log(LoggingLevel.DEBUG, "be.kdg.teamf", "Project: ${body}")
            .to("hibernate:be.kdg.teamf.model.Build");

豆:

 @Consumed
 public Build processBuild(Build build) {
    //updaten van foreign key
    build.setJenkinsConfig(jenkinsConfiguration);
    return build;
 }
于 2013-05-14T12:42:24.023 回答