2016-05-03 2 views
0

создавал три объекта, как показано ниже -создание Unsuccesssful таблицы с использованием SpringData и зимуют

User.java

@Entity 
@Table(name = "user") 
public class User { 

     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     @Column(name="user_id") 
     private long id; 

     @NotNull 
     private String email; 

     @NotNull 
     private String name; 

     @NotNull 
     private String contact; 

    //getters and setters 

} 

Books.java

@Entity 
    @Table(name="books") 
    public class Books { 

     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     @Column(name="isbn") 
     private long isbn; 

     @NotNull 
     private String bookName; 

     @NotNull 
     private String bookDescription; 

     @NotNull 
     private String price; 

     //getters and setters 
    } 

Purchases.java

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

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private String order_id; 

    @Temporal(TemporalType.TIMESTAMP) 
    private Date creation_time; 

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


    @OneToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name="isbn") 
    private Books book; 

    // getters and setters 
    } 

И контроль Мюллером

@Controller 
public class PurchaseController { 

    @Autowired 
    UserDAO userDAO; 

    @Autowired 
    BooksDAO booksDAO; 

    @Autowired 
    PurchasesDAO purchaseDAO; 

    @RequestMapping("/createUser") 
    @ResponseBody 
    public String createUser(String email, String name, String contact){ 
     User user=null; 
     try{ 
      user=new User(email,name,contact); 
      userDAO.save(user); 
      }catch(Exception e){ 
       return "Problem occured while saving user :"+e; 
      } 
      return "User succesfully created! (id = " + user.getId() + ")"; 
    } 


    @RequestMapping("/createBook") 
    @ResponseBody 
    public String createBooks(String bookName, String bookDesc, String price){ 
     Books book=null; 
     try{ 
      book=new Books(bookName,bookDesc,price); 
      booksDAO.save(book); 
      }catch(Exception e){ 
       return "Problem occured while saving book details :"+e; 
      } 
      return "Book succesfully created! (isbn = " + book.getIsbn() + " name = "+book.getBookName()+")"; 
    } 

    @RequestMapping("/purchase") 
    @ResponseBody 
    public String purchase(Long user_id, Long isbn){ 
     Books book=null; 
     User user=null; 
     Purchases purchase=null; 
     Date creation_date=new Date(); 
     try{ 
      book=booksDAO.findOne(isbn); 
      user=userDAO.findOne(user_id); 
      System.out.println("book= "+book+" and user= "+user+""); 
      if(book.getIsbn()==0 || user.getId()==0){ 
       return "Book with isbn="+isbn+" or user with user id ="+user_id+" not found."; 
      } 
      purchase = new Purchases(creation_date,user,book); 
      purchaseDAO.save(purchase); 

     }catch(Exception e){ 
      return "Exception occured while purchasing book ["+e+"]"; 
     } 

     return "Book purchased"; 
    }} 

Интерфейс дао расширяет CrudRepository<Class, Long>{} и аннотированные в transactional. Проблема в том, что третья таблица, которая является purchase.java, не создается. Получение следующего на консоли.

2016-05-03 18:13:33.876 INFO 19570 --- [   main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [ 
    name: default 
    ...] 
2016-05-03 18:13:33.920 INFO 19570 --- [   main] org.hibernate.Version     : HHH000412: Hibernate Core {4.3.8.Final} 
2016-05-03 18:13:33.921 INFO 19570 --- [   main] org.hibernate.cfg.Environment   : HHH000206: hibernate.properties not found 
2016-05-03 18:13:33.922 INFO 19570 --- [   main] org.hibernate.cfg.Environment   : HHH000021: Bytecode provider name : javassist 
2016-05-03 18:13:34.062 INFO 19570 --- [   main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {4.0.5.Final} 
2016-05-03 18:13:34.388 INFO 19570 --- [   main] org.hibernate.dialect.Dialect   : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect 
2016-05-03 18:13:34.465 INFO 19570 --- [   main] o.h.h.i.ast.ASTQueryTranslatorFactory : HHH000397: Using ASTQueryTranslatorFactory 
2016-05-03 18:13:34.707 INFO 19570 --- [   main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000227: Running hbm2ddl schema export 
Hibernate: alter table purchases drop foreign key FK_laat6sjwiu2hcenno94vyj0jb 
2016-05-03 18:13:34.716 ERROR 19570 --- [   main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: alter table purchases drop foreign key FK_laat6sjwiu2hcenno94vyj0jb 
2016-05-03 18:13:34.716 ERROR 19570 --- [   main] org.hibernate.tool.hbm2ddl.SchemaExport : Table 'purchase_books.purchases' doesn't exist 
Hibernate: alter table purchases drop foreign key FK_klpjcob070n95mdvt1473hs1s 
2016-05-03 18:13:34.716 ERROR 19570 --- [   main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: alter table purchases drop foreign key FK_klpjcob070n95mdvt1473hs1s 
2016-05-03 18:13:34.716 ERROR 19570 --- [   main] org.hibernate.tool.hbm2ddl.SchemaExport : Table 'purchase_books.purchases' doesn't exist 
Hibernate: drop table if exists books 
Hibernate: drop table if exists purchases 
Hibernate: drop table if exists user_details 
Hibernate: create table books (isbn bigint not null auto_increment, book_description varchar(255) not null, book_name varchar(255) not null, price varchar(255) not null, primary key (isbn)) 
Hibernate: create table purchases (order_id bigint not null auto_increment, creation_time datetime, isbn bigint, user_id bigint, primary key (order_id)) 
Hibernate: create table user_details (user_id bigint not null auto_increment, contact varchar(255) not null, email varchar(255) not null, name varchar(255) not null, primary key (user_id)) 
Hibernate: alter table purchases add constraint FK_laat6sjwiu2hcenno94vyj0jb foreign key (isbn) references books (isbn) 
Hibernate: alter table purchases add constraint FK_klpjcob070n95mdvt1473hs1s foreign key (user_id) references user_details (user_id) 
2016-05-03 18:13:37.037 INFO 19570 --- [   main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000230: Schema export complete 

Использование SpringBoot для запуска приложения. В сообщении упоминается проблема, но не в состоянии понять. Может ли кто-нибудь прокомментировать это или сказать, как решить то же самое? Таблица создается с использованием hibernate в базе данных sql.

+1

Возможно, вам не хватает кода. Объект закупки здесь отсутствует, и это то, к чему относится большинство ошибок. – Nerdfest

+1

Нет проблем с созданием таблиц, почему вы так думаете. Ошибки не указывают на то, что таблицы не могут быть созданы, они созданы успешно (см. Инструкции 'create table' в регистрации). Если бы это не получилось, ваше приложение не было бы запущено. –

+0

Спасибо за помощь. Возникла проблема в определении поля первичного ключа в субъекте покупок, который был исправлен. – Harshit

ответ

0

невозможно использовать @GeneratedValue(strategy = GenerationType.AUTO) для String собственности

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private String order_id; 

изменить его на Long, для примера

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

Пожалуйста, не используйте имена таблиц как user. Это зарезервированное ключевое слово в PostgreSQL.

+0

ОК, изменились, как упомянуто. Но та же проблема все еще сохраняется. – Harshit

+1

@ Harshit Является ли трассировка стека такой же? Пожалуйста, поместите новую трассировку стека и отформатируйте ее как код (Ctrl + K). –

+0

@ Гаршит Похоже, все хорошо. :) –

1

Проверьте тип заказа на покупку order_id. Я думаю, вы можете захотеть, чтобы это было числовое, возможно, типа «long».

+0

Сделали изменения, как упоминалось, но эта же проблема по-прежнему сохраняется. – Harshit

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