-1

休止状態を学習していますが、次のプログラムを実行すると、次のメッセージ Hibernate: insert into contact (firstname, lastname, email, id) values (?, ?, ?, ?)が表示されます。しかし、テーブルを確認すると、何も挿入されていないようです。ここで何が問題ですか?明らかにステートメント値フィールドは null ですが、なぜでしょうか?

私は次のPOJOを持っています:

public class Contact {
  private String firstName;
  private String lastName;
  private String email;
  private long id;

  /**
 * @return Email
 */
  public String getEmail() {
  return email;
  }

  /**
 * @return First Name
 */
  public String getFirstName() {
  return firstName;
  }

  /** 
 * @return Last name
 */
  public String getLastName() {
  return lastName;
  }

  /**
 * @param string Sets the Email
 */
  public void setEmail(String string) {
  email = string;
  }

  /**
 * @param string Sets the First Name
 */
  public void setFirstName(String string) {
  firstName = string;
  }

  /**
 * @param string sets the Last Name
 */
  public void setLastName(String string) {
  lastName = string;
  }

  /**
 * @return ID Returns ID
 */
  public long getId() {
  return id;
  }

  /**
 * @param l Sets the ID
 */
  public void setId(long l) {
  id = l;
  }

}

以下は、私の休止状態の構成と hbm ファイルです。

<?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/aneesh</property>
      <property name="hibernate.connection.username">root</property>
      <property name="hibernate.connection.password">123</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="contact.hbm.xml"/>
</session-factory>
</hibernate-configuration>




<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="Contact" table="contact">
   <id name="id"  column="id" >
   <generator class="assigned"/>
  </id>

  <property name="firstName" >
   <column name="firstname" />
  </property>
  <property name="lastName">
  <column name="lastname"/>
  </property>
  <property name="email" >
  <column name="email"/>
  </property>
 </class>
</hibernate-mapping>

挿入するコードは次のとおりです。

import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.Session;


public class HSession {
  public static void main(String[] args) {
      Session session = null;

  try{
      SessionFactory sessionGet = new Configuration().configure().buildSessionFactory();

      session = sessionGet.openSession();

     Contact contact = new Contact();

     contact.setFirstName("xyz");
     contact.setLastName("zyx");
     contact.setEmail("x@xmail.com");
     contact.setId(20);
     session.save(contact);



  }finally{
  // Actual contact insertion will happen at this step
  try {
    session.flush();
      session.close();
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

  }

  }
}
4

4 に答える 4

2

オブジェクトを保存する前にトランザクションを取得する必要があり、オブジェクトを保存した後にトランザクションをコミットする必要があります。

                Transaction tx = session.beginTransaction();
                session.save(contact);
                 tx.commit();
于 2013-07-26T05:30:22.410 に答える
2

transaction保存で使用します。

session.getTransaction().begin();
session.save(contact);
session.getTransaction().commit();
于 2013-07-26T05:30:52.597 に答える
1

挿入がデータベースに反映されるようにコミットする必要があります

session.getTransaction().commit();

あなたの後

session.save(contact);
于 2013-07-26T05:29:49.470 に答える