我有以下Model类:
package com.swaranga.model;
public final class Book
{
private Long id;
private String title;
private String isbn;
public Book(){}
public Book(String title, String isbn)
{
this.title = title;
this.isbn = isbn;
}
public final Long getId(){
return id;
}
private final void setId(Long id)
{
this.id = id;
}
public final String getTitle()
{
return title;
}
public final void setTitle(String title)
{
this.title = title;
}
public final String getIsbn()
{
return isbn;
}
public final void setIsbn(String isbn)
{
this.isbn = isbn;
}
//assume valid equals and hashcode
}
具有以下映射文件Book.hbm.xml:
<hibernate-mapping>
<class name="com.swaranga.model.Book" table="book">
<id name="id" type="long">
<generator class="native"/>
</id>
<property name="title" column="title" type="string"/>
<property name="isbn" column="isbn" type="string"/>
</class>
</hibernate-mapping>
以下数据库架构:
CREATE TABLE `hibernatetest`.`book` (
`id` int(10) unsigned NOT NULL auto_increment,
`title` varchar(45) NOT NULL,
`isbn` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
以下hibernate配置文件:
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver </property>
<property name="connection.url">jdbc:mysql://localhost:3306/HibernateTest </property>
<property name="connection.username"> root </property>
<property name="connection.password"> latitude </property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect </property>
<property name="myeclipse.connection.profile">mysql</property>
<mapping resource="com\swaranga\model\Book.hbm.xml" />
</session-factory>
</hibernate-configuration>
最后使用以下代码来保留Book
对象:
public class Main
{
public static void main(String[] args)
{
File f = new File("hibernate.cfg.xml");
Configuration cfg = new Configuration();
SessionFactory sessionFactory = cfg.configure(f).buildSessionFactory();
Session s = sessionFactory.openSession();
s.beginTransaction();
s.save(new Book("JDBC", "ISBN_!@#"));
s.flush();
s.disconnect();
}
}
我在控制台中收到以下输出:
Hibernate: insert into book (title, isbn) values (?, ?)
但是当我检查我的数据库时,没有条目。
对这么长的问题抱歉,但我认为有必要提供所有细节。请帮忙。提前谢谢。
答案 0 :(得分:3)
尝试将main方法的结尾编辑为:
Transaction tx = s.beginTransaction();
s.save(new Book("JDBC", "ISBN_!@#"));
tx.commit();
s.flush();
s.disconnect();
答案 1 :(得分:0)
“auto”是一个有效的生成器类吗?
它没有在文档的O / R映射部分列出,并且从你看起来的样子开始,你没有在代码或数据库中生成ID:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html
如果你想分配id,我会查看native,或者让一个身份生成器让MySQL处理它。
答案 2 :(得分:0)
您是否尝试过ID“long”?
答案 3 :(得分:0)
您尚未将数据库的ID设置为自动递增。试试吧。应该工作。