Apache camel is using a route wich is listening to a specific url. the json
from this url is then transformed to pojo classes and inserted in a mySQL
database. Everything is working fine, except my foreign key still remains
null. I'm using spring framework btw.

Here is the url where you can find the data:
https://builds.apache.org:443/job/Accumulo-1.5/api/json

Here is my routedefinition for camel

@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");    


    }

My POJO class

@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);
}

}
}

Let us take the builds for instance. As you can see, this pojo class
contains a list from builds. A JenkinsConfiguration can contain more builds.
One build belongs to one JenkinsConfiguration.

This is my Build class:

@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;
}
}

My question: how come that my foreign key is not set for the build class? it
remains null. Doe I need to update it manually or something? If so, can I do
this using camel by getting all the rows from my database and then updating
them?

Any help would me much appreciated!



--
View this message in context: 
http://camel.465427.n5.nabble.com/JSON-to-POJO-using-Apache-Camel-and-hibernate-tp5732466.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to