Too Smart
asked on
Unable to insert newly added column data into mySql from Spring Data Jpa, Spring Data REST, liquibase and Angularjs based project
I am working on a Spring Data Jpa, Spring Data Rest, liquibase and AngularJs based project and is working fine for the existing columns of the Invoice Table. I added a new column 'ediNumber' to this table through liquibase which has successfully added new column to my Invoice Table (mySql). But the problem I am facing is when I am trying to insert new record from front end (Angularjs) the newly added column value is always getting inserted as null. I can clearly in the console before save function the object has ediNumber too.
Save function in controller :
The above console log shows, the following where we can notice the ediNumber too. But ediNumber value is not getting inserted in the mySql database table.
In my browser console, the post request is getting formed as follows:
Here you can notice there is no ediNumber, I am not able to understand why that ediNumber is not appearing in my post request. I made the following changes too in my back end,
In Invoice.java
in InvoiceResource.java, I have post call as,
And the following is my backend debug log on spring data jpa end,
Save function in controller :
$scope.save = function() {
if ($scope.invoice.id != null) {
Invoice.update($scope.invoice, onSaveFinished);
} else {
console.log(JSON.stringify($scope.invoice))
Invoice.save($scope.invoice, onSaveFinished);
}
};
The above console log shows, the following where we can notice the ediNumber too. But ediNumber value is not getting inserted in the mySql database table.
{"accountNumber":"ACN8436346","invoiceNumber":"INV232643276","invoiceAmount":73466,"status":"Open","ediNumber":"EDI46464386","id":null}
In my browser console, the post request is getting formed as follows:
POST http://localhost:8080/api/invoices?cacheBuster=1444273583860 201 Created 158ms
{"id":8,"accountNumber":"ACN8436346","invoiceNumber":"INV232643276","invoiceAmount":73466.0,"status"
:"Open","invoiceDetailss":[]}
Here you can notice there is no ediNumber, I am not able to understand why that ediNumber is not appearing in my post request. I made the following changes too in my back end,
In Invoice.java
/**
* A Invoice.
*/
@Entity
@Table(name = "invoice")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Invoice implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "account_number")
private String accountNumber;
@Column(name = "invoice_number")
private String invoiceNumber;
@Column(name = "invoice_amount")
private Double invoiceAmount;
@Column(name = "status")
private String status;
@Column(name = "edi_number")
private String ediNumber;
@OneToMany(mappedBy = "invoice")
//@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<InvoiceDetails> invoiceDetailss = new HashSet<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public String getInvoiceNumber() {
return invoiceNumber;
}
public void setInvoiceNumber(String invoiceNumber) {
this.invoiceNumber = invoiceNumber;
}
public Double getInvoiceAmount() {
return invoiceAmount;
}
public void setInvoiceAmount(Double invoiceAmount) {
this.invoiceAmount = invoiceAmount;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getEdiNumber() {
return ediNumber;
}
public void setEdiNumber(String ediNumber) {
this.ediNumber = ediNumber;
}
public Set<InvoiceDetails> getInvoiceDetailss() {
return invoiceDetailss;
}
public void setInvoiceDetailss(Set<InvoiceDetails> invoiceDetailss) {
this.invoiceDetailss = invoiceDetailss;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Invoice invoice = (Invoice) o;
if ( ! Objects.equals(id, invoice.id)) return false;
return true;
}
@Override
public int hashCode() {
return Objects.hashCode(id);
}
@Override
public String toString() {
return "Invoice{" +
"id=" + id +
", accountNumber='" + accountNumber + "'" +
", invoiceNumber='" + invoiceNumber + "'" +
", invoiceAmount='" + invoiceAmount + "'" +
", ediNumber='" + ediNumber + "'" +
", status='" + status + "'" +
'}';
}
}
in InvoiceResource.java, I have post call as,
/**
* POST /invoices -> Create a new invoice.
*/
@RequestMapping(value = "/invoices",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<Invoice> create(@RequestBody Invoice invoice) throws URISyntaxException {
log.debug("REST request to save Invoice : {}", invoice);
if (invoice.getId() != null) {
return ResponseEntity.badRequest().header("Failure", "A new invoice cannot already have an ID").body(null);
}
Invoice result = invoiceRepository.save(invoice);
return ResponseEntity.created(new URI("/api/invoices/" + result.getId()))
.headers(HeaderUtil.createEntityCreationAlert("invoice", result.getId().toString()))
.body(result);
}
And the following is my backend debug log on spring data jpa end,
[DEBUG] com.sample.web.rest.InvoiceResource - REST request to save Invoice : Invoice{id=null, accountNumber='ACN8436346', invoiceNumber='INV232643276', invoiceAmount='73466.0', status='Open'}
Hibernate: insert into invoice (account_number, invoice_amount, invoice_number, status) values (?, ?, ?, ?)
[DEBUG] com.sample.aop.logging.LoggingAspect - Exit: com.sample.web.rest.InvoiceResource.create() with result = <201 Created,Invoice{id=8, accountNumber='ACN8436346', invoiceNumber='INV232643276', invoiceAmount='73466.0', status='Open'},{Location=[/api/invoices/8], X-sampleApp-alert=[sampleApp.invoice.created], X-sampleApp-params=[8]}>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
That is the catch. My code did not compiled properly. I restarted eclipse and then compiled again then every thing went well. Thanks for catching it.
ASKER