2010-12-13 9 views
4

나는 Hibernate를 시작하려하지만 어떤 이유로 데이터를 삽입 할 수 없다. 오류가 없으므로 제대로 작동하는 것 같지만 데이터베이스를 확인하면 테이블이 비어 있습니다. 매핑 XML에서 테이블 이름을 non-excisting 테이블 이름으로 변경하면 Hibernate가 즉석에서이 테이블 이름을 생성하기 때문에 실패하는 데이터베이스 자체에 대한 연결이라고 생각하지 않습니다 (하지만 내가 말했던 것처럼 데이터는 삽입되지 않습니다) . 누구든지 그 문제가 무엇인지 알 수 있습니까?데이터가 최대 절전 모드로 삽입되지 않았지만 오류가 발생하지 않습니까?

있는 hibernate.cfg.xml :

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
    <session-factory> 
      <property  name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
      <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/intex</property> 
      <property name="hibernate.connection.username">root</property> 
      <property name="hibernate.connection.password"></property> 
      <property name="hibernate.connection.pool_size">10</property> 
      <property name="show_sql">true</property> 
      <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
      <property name="hibernate.hbm2ddl.auto">update</property> 
      <!-- Mapping files --> 
      <mapping resource="intex.hbm.xml"/> 
    </session-factory> 
</hibernate-configuration> 

내 매핑 XML :

<hibernate-mapping> 
    <class name="com.intex.uni.courses.Course" table="course"> 
    <id name="id" column="id" > 
    <generator class="increment"/> 
    </id> 

    <property name="name" column="name" /> 
    <property name="description" column="description" /> 
    <property name="url" column="url" /> 
    <property name="code" column="code" /> 
</class> 
</hibernate-mapping> 

그리고 내 테스트 클라이언트 :

01 여기

내 코드입니다

정말 누군가가 나를 도울 수 있기를 바랍니다. 미리 감사드립니다 :)

+0

하이버 네이트가 생성하는 SQL을 게시 할 수도 있습니까? –

답변

5

사용에 메인 클래스에서이 코드와 테스트를보고 - Hibernate Getting Started Tutorial Example 2.5

대안은 트랜잭션이 암시되도록의 당신의 코드에 커밋 모드 최대 절전 모드로 설정 할 수 있어야한다는 것입니다.

Session session = null; 
Transaction txn = null; 
try { 
    SessionFactory sessionFactory = 
     new Configuration().configure().buildSessionFactory(); 
    session = sessionFactory.openSession(); 
    txn = session.beginTransaction(); 
    Course course = new Course(); 
    course.setDescription("Description"); 
    course.setName("NAME"); 
    course.setUrl("http://www.url.com"); 
    session.save(course); 
    txn.commit(); 

} catch (Exception e) { 
    System.out.println(e.getMessage()); 
} finally { 
    if (!txn.wasCommitted()) { 
     txn.rollback(); 
    } 

    session.flush(); 
    session.close(); 
} 
+1

이 트랜잭션 관리를 자동으로 수행해서는 안됩니까? –

5

시스템이 필요한 삽입이 포함 된 트랜잭션을 커밋하지 않는 것 같습니다. 나는 항상 거래를 명시 적으로 설정합니다. FlushMode

+0

팁을 보내 주셔서 감사합니다. 내일 컴퓨터를 사용하고 있지 않습니다 ... – Kris

0

다음 코드를 사용해보십시오 :

public class HibernateTest { 

    public static void main(String[] args) { 

     Session session = null; 
     Transaction txn = null; 
     try { 
      SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
      session = sessionFactory.openSession(); 
      txn = session.beginTransaction(); 
      Course course = new Course(); 
      course.setDescription("Description"); 
      course.setName("NAME"); 
      course.setUrl("http://www.url.com"); 
      session.save(course); 
      txn.commit(); 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } finally { 
      session.flush(); 
      session.close(); 
     } 
    } 
} 
+0

설명 해주세요. – johannes

0

전에 트랜잭션을 시작 저장하고 저장 후 트랜잭션을 커밋하십시오.

관련 문제