#java #mysql #spring #hibernate #rest
#java #mysql #spring #спящий режим #rest
Вопрос:
Этот метод заключается в сохранении как родительского, так и дочернего :
public Response createMultipleChilds(PurchaseOrderHeader purchaseOrderHeader){
try {
s=sf.openSession();
tx=s.beginTransaction();
createParent(purchaseOrderHeader);
for(int i=0;i<purchaseOrderHeader.getPurchaseItemList().size();i ){
purchaseOrderHeader.getPurchaseItemList().get(i).setHeaderDetails(purchaseOrderHeader);
createChild(purchaseOrderHeader.getPurchaseItemList().get(i));
}
response.setStatus(200);
response.setMessage(" both added succesfull");
if(tx.isActive()){
tx.commit(); }
} catch (Exception e) {
System.err.println("Exception : " e.getMessage());
response.setStatus(500);
response.setMessage("parent not added");
tx.rollback();
}finally{
s.close();
}
return response;
}
Этот метод вызывается для сохранения родительских атрибутов :
private void createParent(PurchaseOrderHeader purchaseOrderHeader) {
try {
s=sf.openSession();
tx=s.beginTransaction();
PurchaseOrderHeader order=new PurchaseOrderHeader();
if(purchaseOrderHeader.getCompany_code() instanceof String)
order.setCompany_code(purchaseOrderHeader.getCompany_code());
if(purchaseOrderHeader.getCurrency() instanceof String)
order.setCurrency(purchaseOrderHeader.getCurrency());
if(purchaseOrderHeader.getStatus() instanceof String)
order.setStatus(purchaseOrderHeader.getStatus());
if(purchaseOrderHeader.getVendor() instanceof String)
order.setVendor(purchaseOrderHeader.getVendor());
order.setPurchaseItemList(null);
order.setDocument_number(purchaseOrderHeader.getDocument_number());
s.save(order);
response.setStatus(200);
response.setMessage(" parent added succesfull");
if(tx.isActive()){
tx.commit(); }
} catch (Exception e) {
System.err.println("Exception : " e.getMessage());
response.setStatus(500);
response.setMessage("parent not added");
tx.rollback();
}
finally{
s.close();
}
}
Этот метод вызывается для сохранения дочернего элемента :
private void createChild(PurchaseItem purchaseItem) {
try {
s=sf.openSession();
tx=s.beginTransaction();
PurchaseItem item=new PurchaseItem();
if(purchaseItem.getItemName() instanceof String)
item.setItemName(purchaseItem.getItemName());
if(purchaseItem.getItemPrice() instanceof String)
item.setItemPrice(purchaseItem.getItemPrice());
item.setHeaderDetails(purchaseItem.getHeaderDetails());
s.save(item);
response.setStatus(200);
response.setMessage(" child added succesfull");
if(tx.isActive()){
tx.commit(); }}
catch (Exception e) {
System.err.println("Exception : " e.getMessage());
response.setStatus(500);
response.setMessage("child not added");
tx.rollback();
}
finally{
s.close();
}
}
Метод сохраняет как родительский, так и дочерний, но он не проверяет (имеется в виду, когда я передаю значение int вместо string.Он сохраняется, даже если я проверяю тип данных)
Комментарии:
1. Когда вы используете двойные коды в структуре json, это будет обрабатываться как string вместо int.
2. Я не использую двойные кавычки, но все равно он сохраняется: [{ «ItemName»: «sample», «ItemPrice»: 12000 }. здесь «itemprice» — это строка, и я даю значение int, но оно все равно сохраняется
3.Я понятия не имею, почему это происходит именно так.Почему вы не используете JAXB marshall amp; unmarshall .mkyong.com/java/jaxb-hello-world-example howtodoinjava.com/jaxb/read-xml-to-java-object
4. Хорошо, спасибо за предложение