2013-02-15 30 views
2

这里JPA不会产生表的一些实体:从实体

@Entity 
public class Forest { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 


    public Forest() { 
    } 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 
} 

我要插入表森林一些元素:

public class Main { 
private static EntityManagerFactory emf = 
     Persistence.createEntityManagerFactory("server"); 

    public static void main(String[] args) { 

     EntityManager em = emf.createEntityManager(); 
     EntityTransaction trx = em.getTransaction(); 
     Forest forest = new Forest(); 


     trx.begin(); 
     em.persist(forest); 
     trx.commit(); 

    } 
} 

抛出的异常:

Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: Table 'server.forest' doesn't exist 

Caused by: org.hibernate.exception.SQLGrammarException: Table 'server.forest' doesn't exist 

我的坚持带设置的.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="server"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 

     <properties> 
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
      <property name="javax.persistence.jdbc.url"    value="jdbc:mysql://localhost:3306/server"/> 
      <property name="javax.persistence.jdbc.user" value="root" /> 
      <property name="javax.persistence.jdbc.password" value="root" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
      <property name="hibernate.hbm2ddl.auto" value="create-drop"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

当我删除@GeneratedValue(strategy = GenerationType.AUTO)并为林设置ID: forest.setID(1)时,没有发生异常并且已生成表。所以,ID的自动生成不起作用,我不知道为什么。

+0

哪个版本的hibernate? – 2013-02-15 19:44:13

回答

4

根据配置有org.hibernate.dialect.HSQLDialect与MySQL数据库一起使用。使用MySQL方言而不是HSQL可能会有所帮助。可能使用InnoDB - 如果是这样,那么MySQL5InnoDBDialect就是要走了。

+0

非常感谢!我很防腐! – 2013-02-15 19:58:41