2

У меня есть одна таблица в db. Создал класс pojo для сопоставления экземпляра класса для таблицы. мой класс структураHibernate не сохраняет объект, даже не получая ошибки в журнале

@Entity 
    @Table(name = "example") 
    class example { 
    @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     @Column(name = "ID") 
     int id; 
     @Column(name = "SLOT_ID") 
     int slot_id; 
     @Column(name = "SLOT_DATE") 
     String slot_date; 
     @Column(name = "HOTEL_ID") 
     String hotel_id; 
     @Column(name = "ROOM_TYPE_ID") 
     String room_type_id; 
     @Column(name = "CREATE_DATE") 
     String create_date; 
     @Column(name = "UPDATE_DATE") 
     String update_date; 
     @Column(name = "SLOT_PRICE") 
     Double slot_price; 
     @Column(name = "AVAILABLE_ROOMS") 
     Integer available_roooms; 

//rest have getter and setter method } 

Hibernet фиксации часть

public void save(Example example) { 

     Session session = null; 
     try { 
      log.info(example.toString()); 
      session = this.sessionFactory.openSession(); 
      Transaction tx = session.beginTransaction(); 
      session.persist(example); 
      tx.commit(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      session.close(); 
     } 
    } 

в журнале я получаю этот журнал

Hibernate: insert into example(AVAILABLE_ROOMS, CREATE_DATE, HOTEL_ID, ROOM_TYPE_ID, SLOT_DATE, SLOT_ID, SLOT_PRICE, UPDATE_DATE) values (?, ?, ?, ?, ?, ?, ?, ?) 

Я могу получить данные из одной таблицы здесь есть код оснастки `

session = this.sessionFactory.openSession(); 
Criteria cr = session.createCriteria(Example.class); cr.add(Restrictions.eq("id", id)); List results = cr.list(); 
if(results.size()>0) 
return mapper.writeValueAsString(results.get(0)); //id is auto //incremented in table` 

I dont см. любую ошибку в журнале, но когда я щекочусь в БД, данные не были вставлены. Все подскажут, что я пропустил?

+0

Как вы создаете свой сеанс FAC Тори? –

+0

Привет, Джон, я определил сессионную фабрику как фасоль, тогда она была автомодулирована с имплантацией @Autowired public void setSessionFactory (SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } Я проверил, я получаю экземпляр sessionFactory – nand

+0

Привет, Джон, я могу получить данные из одной таблицы здесь: Code snap session = this.sessionFactory.openSession(); Критерии cr = session.createCriteria (Example.class); cr.add (Restrictions.eq ("id", id)); Результаты поиска = cr.list(); if (results.size()> 0) return mapper.writeValueAsString (results.get (0)); // id is auto // увеличивается в таблице – nand

ответ

4

Используйте этот код и тест один раз

public void save(Example example) { 
    Session session = null; 
    Transaction tx=null; 
    try { 
     log.info(example.toString()); 
     session = this.sessionFactory.openSession(); 
     tx = session.beginTransaction(); 
     session.persist(example); 
     tx.commit(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 

    if (!tx.wasCommitted()) { 
    tx.rollback(); 
    }//not much doing but a good practice 
    session.flush(); //this is where I think things will start working. 
    session.close(); 
    } 
} 

Хороший повод называть вровень до того близко here

+0

Привет, Viraj, я пробовал, но это не сработало. Я также попробую еще одну вещь. создайте новую таблицу без какого-либо поля auto-inremented, а затем вставьте фиктивные данные (Hibernate: insert into person (name, id) values ​​(?,?) ). Я добавил, что вставка - это happeing, поэтому я думаю, что автоматическое увеличение поля может быть проблемой. если вы чувствуете то же самое, можете ли вы предложить мне какой-то способ исправить эту проблему. – nand

+0

ваше решение работает. db требует времени, чтобы отразить вставленные данные :-) – nand

+0

@Nand Да, это может занять время, а также спящий режим требует времени, чтобы слить его тоже .. Рад, что это сработало. Вы можете принять этот ответ, если мое решение сработало. :-) –

2

я думаю, что вы должны использовать session.save() вместо session.persist(), или вы должны использовать флеш в конце транзакции как указано на Вирадж, а также передать этот пост

What's the advantage of persist() vs save() in Hibernate?

+0

Привет, pappu, я использую «session.persist», а также проверенный код, предоставленный viraj, который не работал. Я думаю, проблема с автоматически увеличивающимся полем, указанным в таблице. Не могли бы вы показать мне, как это исправить. – nand

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