首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

Hibernate起动后不能自动建表

2013-01-06 
Hibernate启动后不能自动建表有两个实体Order和User,user和order的关系为一对多关系。但是我启动项目时不能

Hibernate启动后不能自动建表
有两个实体Order和User,user和order的关系为一对多关系。但是我启动项目时不能自动建表。数据库我已经建立。
代码如下:


User.java
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String username;
private String password;
private String sex;
private Date birthday;
private String email;
private int type;
private Set<Order> orders;
}
Order.java
public class Order implements java.io.Serializable {

private static final long serialVersionUID = 1L;
private int id;
/*
 * 订单编号
 */
private String orderCode;
private User user;
}
Order.hbm.xml
<hibernate-mapping package="entity">
<class name="Order" table="order">
<id name="id" column="id" type="integer">
<generator class="native"></generator>
</id>
<property name="orderCode" type="string">
<column name="order_code"></column>
</property>

</class>
</hibernate-mapping>
User.hbm.xml
<hibernate-mapping package="entity">
<class name="User" table="user">
<id name="id" column="id" type="integer">
<generator class="native"></generator>
</id>
<property name="username" type="string">
<column name="username"></column>
</property>
<property name="password" type="string">
<column name="password"></column>
</property>
<property name="sex" type="string">
<column name="sex"></column>
</property>
<property name="birthday" type="timestamp">
<column name="birthday"></column>
</property>
<property name="email" type="string">
<column name="email"></column>
</property>
<property name="type" type="integer">
<column name="type"></column>
</property>
<set name="orders" inverse="true" cascade="all">
<key column="user_id"></key>
<one-to-many class="Order"/>
</set>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.url" >jdbc:mysql://localhost:3306/reg</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.hbm2ddl.auto">all</property>
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>


        
        <mapping resource="entity/User.hbm.xml"/>
        <mapping resource="entity/Order.hbm.xml"/>
    </session-factory>
</hibernate-configuration>


我这些配置是不是有问题?为什么不能自动生成表
[解决办法]
hibernate.hbm2ddl.auto=create 
你少配置这么一相,这个菜是自动建表的配置信息,详情你百度就知道了
[解决办法]
hbm2ddl.auto 好像没有all这个属性吧

<property name="hbm2ddl.auto">create</property>
     hbm2ddl.auto其中有四个属性分别有validate,update,create,create-drop。
在sessionFactory 建立的时候自动检查数据库表结构,或者将数据库schema的DDL导到数据库中,

使用create-drop时,在显示关闭 sessionFactory时,将drop掉数据库的schema,
create顾名思义,每次都会根据映射文件创建新表.
update是数据库中表已经存在了,如果配置文件改变了(增加了一个属性,相当于再数据库中加了一个字段)那么update会自动在数据库中加上这个字段,
validate相当于每次插入数据之前都会验证数据库中的表结构和hbm文件的结构是否一致
[解决办法]
<property name="hbm2ddl.auto">update</property>

建议使用update   使用create 每运行一次都会将之前的数据清空的!!
[解决办法]
Order.hbm.xml<hibernate-mapping package="entity">    <class name="Order" table="order">        <id name="id" column="id" type="integer">            <generator class="native"></generator>        </id>        <property name="orderCode" type="string">            <column name="order_code"></column>        </property>             </class></hibernate-mapping>
这里缺少many to one 的配置或者你可以自己建表然后用myeclipse反射机制生成domain和映射文件。
[解决办法]
不用加hibernate吧,加hibernate是在spring中这样配置

热点排行