I am trying to insert a very simple table, but everytime I run the test program(see code below), I end up updating existing record. the generated sql is a insert statement but looks like it doesn't cause mysql to generate a new PK for it. I do have auto_increment specified:
CREATE TABLE `DIGITAL_GIFTS` (
`DIGITAL_GIFT_ID` bigint(20) NOT NULL auto_increment,
`PURCHASER_CUSTOMER_ID` bigint(20) NOT NULL default '0',
`RECIPIENT_CUSTOMER_ID` bigint(20) default NULL,
`ORDER_ID` varchar(255) NOT NULL default '',
`STATUS` varchar(255) NOT NULL default '',
`PURCHASE_DATE` datetime NOT NULL default '0000-00-00 00:00:00',
`CREATED_BY` varchar(255) NOT NULL default '',
`CREATION_DATE` datetime NOT NULL default '0000-00-00 00:00:00',
`LAST_UPDATE_BY` varchar(255) default NULL,
`LAST_UPDATE` datetime default NULL,
PRIMARY KEY (`DIGITAL_GIFT_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Hibernate version:3.05
configuration file:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="connection.url">jdbc:mysql://xguo/digital-gifting</property>
<property name="connection.username">xguo</property>
<property name="connection.password"></property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory
</property>
<property name="cache.provider_class">
org.hibernate.cache.HashtableCacheProvider
</property>
<property name="hbm2ddl.auto">create</property>
<mapping resource="db/Gift.hbm.xml"/>
</session-factory>
</hibernate-configuration>
mapping file:
<?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="db.Gift" table="DIGITAL_GIFTS">
<id name="id" column="DIGITAL_GIFT_ID" type="long" >
<generator class="native"/>
</id>
<property name="purchaserID" column = "PURCHASER_CUSTOMER_ID" type="long" not-null="true"/>
<property name="recipientID" column = "RECIPIENT_CUSTOMER_ID" type="long"/>
<property name="orderID" column = "ORDER_ID" type="java.lang.String" not-null="true"/>
<property name="status" column = "STATUS" type="java.lang.String" not-null="true"/>
<property name="purchaseDate" column = "PURCHASE_DATE" type="timestamp" not-null="true"/>
<property name="createdBy" column = "CREATED_BY" type="java.lang.String" not-null="true"/>
<property name="creationDate" column = "CREATION_DATE" type="timestamp" not-null="true"/>
<property name="lastUpdatedBy" column = "LAST_UPDATE_BY" type="java.lang.String"/>
<property name="lastUpdateDate" column = "LAST_UPDATE" type="timestamp"/>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():
Transaction tx = session.beginTransaction();
Date now = new Date();
Gift g = new Gift();
g.setPurchaserID(1);
g.setOrderID("ORDER123");
g.setStatus("N");
g.setPurchaseDate(now);
g.setCreatedBy("DGS");
g.setCreationDate(now);
session.save(g);
tx.commit();
Name and version of the database you are using:
mysql 4.1
The generated SQL (show_sql=true):
Hibernate: insert into DIGITAL_GIFTS (PURCHASER_CUSTOMER_ID, RECIPIENT_CUSTOMER_ID, ORDER_ID, STATUS, PURCHASE_DATE, CREATED_BY, CREATION_DATE, LAST_UPDATE_BY, LAST_UPDATE) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
Debug level Hibernate log excerpt:
|