0

Использовал данные весны JPA для творожных операций. получение Exception occurred сообщение в контроллере. Пожалуйста, найдите код для этого же. Также прилагается трассировка стека.Данные о выбросах весны данных JPA

покупки Класс:

@Entity 
@Table(name="purchases") 
public class Purchases { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long orderId; 

    @Temporal(TemporalType.TIMESTAMP) 
    private Date creation_time; 


    @Column(name="user_id") 
    private Long userId; 

    @Column(name="isbn") 
    private Long isbn; 

    @OneToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name="user_id",insertable=false, updatable=false) 
    private User user; 


    @OneToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name="isbn",insertable=false, updatable=false) 
    private Books book; 
    //setters and getters 
} 

Приобретение хранилища -

@Transactional 
public interface PurchasesRepository extends CrudRepository<Purchases, Long>{ 

    List<Purchases> findByUserId(Long userId); 
    List<Purchases> findByIsbn(Long isbn); 
} 

покупки Контроллер -

@RequestMapping(value="/purchase",method=RequestMethod.POST) 
public @ResponseBody Purchases purchase(@RequestBody Purchases purchases)throws Exception{ 
    Books book=null; 
    User user=null; 
    Purchases purchase=null; 
    Date creation_date=new Date(); 

    if(purchases.getOrderId()==null){ 

     //check whether book exists in the database 
     book=booksDAO.findOne(purchases.getIsbn()); 
     user=userDAO.findOne(purchases.getUserId()); 
     if(book==null || user==null){ 
      throw new Exception("Entered book isbn or user id not found !!!");   
     } 
     System.out.println(">>>>>>>>>>>> Book and user exists in the databse <<<<<<<<<<<<<<<<"); 
     System.out.println(">>> user.getId()=["+user.getId()+"]>>>>>> book.getIsbn()=["+book.getIsbn()); 
     System.out.println("<<< purchaseDAO.findByUserId(user.getId())="+purchaseDAO.findByUserId(user.getId())+"<<<<<<<purchaseDAO.findByIsbn(book.getIsbn())="+purchaseDAO.findByIsbn(book.getIsbn())); 

     //check for book already purchase by the customer 
     if(purchaseDAO.findByUserId(user.getId())!=null){ 
      if(purchaseDAO.findByIsbn(book.getIsbn())==null){ 
       purchase = new Purchases(null,creation_date,purchases.getUserId(),purchases.getIsbn()); 
       purchaseDAO.save(purchase); 
       purchase.setBook(book); 
       purchase.setUser(user); 
      }else{     //checking of the isbn 
       throw new Exception("Book already purchased !!!");    
      } 
     }else{   //checking fo the user existing 
      purchase = new Purchases(null,creation_date,purchases.getUserId(),purchases.getIsbn()); 
      purchaseDAO.save(purchase); 
      purchase.setBook(book); 
      purchase.setUser(user); 
     } 
    }else{    //first if checking 
     throw new Exception(" Order_id already used !!! "); 
    } 
    return purchase; 
} 

Покупка класс контроллера -

@RequestMapping(value="/purchase",method=RequestMethod.POST) 
public @ResponseBody Purchases purchase(@RequestBody Purchases purchases)throws Exception{ 
    Books book=null; 
    User user=null; 
    Purchases purchase=null; 
    Date creation_date=new Date(); 

    if(purchases.getOrderId()==null){ 

     //check whether book exists in the database 
     book=booksDAO.findOne(purchases.getIsbn()); 
     user=userDAO.findOne(purchases.getUserId()); 
     if(book==null || user==null){ 
      throw new Exception("Entered book isbn or user id not found !!!");   
     } 
     System.out.println(">>>>>>>>>>>> Book and user exists in the databse <<<<<<<<<<<<<<<<"); 
     System.out.println(">>> user.getId()=["+user.getId()+"]>>>>>> book.getIsbn()=["+book.getIsbn()); 
     System.out.println("<<< purchaseDAO.findByUserId(user.getId())="+purchaseDAO.findByUserId(user.getId())+"<<<<<<<purchaseDAO.findByIsbn(book.getIsbn())="+purchaseDAO.findByIsbn(book.getIsbn())); 

     //check for book already purchase by the customer 
     if(purchaseDAO.findByUserId(user.getId())!=null){ 
      if(purchaseDAO.findByIsbn(book.getIsbn())==null){ 
       purchase = new Purchases(null,creation_date,purchases.getUserId(),purchases.getIsbn()); 
       purchaseDAO.save(purchase); 
       purchase.setBook(book); 
       purchase.setUser(user); 
      }else{     //checking of the isbn 
       throw new Exception("Book already purchased !!!");    
      } 
     }else{   //checking fo the user existing 
      purchase = new Purchases(null,creation_date,purchases.getUserId(),purchases.getIsbn()); 
      purchaseDAO.save(purchase); 
      purchase.setBook(book); 
      purchase.setUser(user); 
     } 
    }else{    //first if checking 
     throw new Exception(" Order_id already used !!! "); 
    } 
    return purchase; 
} 

Использование весеннего ботинка для запуска приложения. Получение исключения в третьей версии system.out. Я попытался использовать класс Buy Purchases как тип возвращаемого значения в классе репозитория покупки вместо списка, но все равно не влияет. Найдите трассировку стека.

Hibernate: select user0_.user_id as user_id1_2_0_, user0_.contact as contact2_2_0_, user0_.email as email3_2_0_, user0_.name as name4_2_0_ from user_details user0_ where user0_.user_id=? 
>>>>>>>>>>>> Book and user exists in the databse <<<<<<<<<<<<<<<< 
>>> user.getId()=[6]>>>>>> book.getIsbn()=[6 
Hibernate: select purchases0_.order_id as order_id1_1_, purchases0_.isbn as isbn3_1_, purchases0_.creation_time as creation2_1_, purchases0_.user_id as user_id4_1_ from purchases purchases0_ where purchases0_.user_id=? 
Hibernate: select purchases0_.order_id as order_id1_1_, purchases0_.isbn as isbn3_1_, purchases0_.creation_time as creation2_1_, purchases0_.user_id as user_id4_1_ from purchases purchases0_ where purchases0_.isbn=? 
<<< purchaseDAO.findByUserId(user.getId())=Exception occurred !!!<<<<<<<purchaseDAO.findByIsbn(book.getIsbn())=Exception occurred !!! 
Hibernate: select purchases0_.order_id as order_id1_1_, purchases0_.isbn as isbn3_1_, purchases0_.creation_time as creation2_1_, purchases0_.user_id as user_id4_1_ from purchases purchases0_ where purchases0_.user_id=? 
Hibernate: select purchases0_.order_id as order_id1_1_, purchases0_.isbn as isbn3_1_, purchases0_.creation_time as creation2_1_, purchases0_.user_id as user_id4_1_ from purchases purchases0_ where purchases0_.isbn=? 
2016-05-05 14:59:47.088 ERROR 12207 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.Exception: Book already purchased !!!] with root cause 
+0

Во-первых, нет stacktrace. Во-вторых, я предлагаю вам создать минимальный неудачный пример, потому что у людей, как правило, недостаточно времени для углубленного изучения некоторых больших фрагментов кода. Это просто дружеский совет, который поможет вам получить ответы –

+0

@JanZyka проверить третью строку 'System.out.println', которая бросает исключение. Вложили только часть того же. Обе строки присутствуют в классе контроллера и трассировке стека, имеют проблему только в этой строке. – Harshit

+0

Это происходит ... 'throw new Exception (« Книга уже куплена !!! »)' Но как 'purchaseDAO.findByUserId (user.getId()) = null)' и 'purchaseDAO.findByIsbn (book.getIsbn()) == null' related? Если есть покупка для пользователя X И есть покупка для книги A? Но это не должно быть одной и той же покупкой, не так ли? Вы тестируете их обособленно ... Итак, если пользователь X купил книгу B и пользователь Y купил книгу A, пользователь X не может купить A, а пользователь Y не может купить B больше ...? Я также предлагаю сделать МНОГО, МНОГО более короткие методы, которые значительно улучшат вашу четкость кода. –

ответ

0

Исключения в заявлении третьей печати, потому что класс покупки модели был определен с ToString() в качестве сообщения печати исключения. Позже я понял это и изменил и получил результат правильно.

Смежные вопросы