2013-02-08 93 views
1

我有應用程序連接到postgres數據庫,我需要創建一個臨時表來存儲數據,然後在作業結束時刪除表。jpa創建表

我使用JPA,但它似乎需要在數據庫的前期創建表,我不想額外的工作來編寫SQL腳本,並且必須在運行作業之前將它運行到設置表,所以我創建JPA查詢中的表然後執行常規的CRUD操作,但它不起作用,是因爲JPA無法即時創建表?我必須先創建表格?這裏是我的代碼:

Map<String, String> properties = Maps.newHashMap(); 
properties.put("javax.persistence.jdbc.url", "jdbc:postgresql://localhost:5432/postgres"); 
properties.put("javax.persistence.jdbc.user", "postgres"); 
properties.put("javax.persistence.jdbc.password", ""); 
EntityManagerFactory emf = Persistence.createEntityManagerFactory("job-postgres", properties); 
String queryStr = "CREATE TEMPORARY TABLE tags (" 
     + "id SERIAL NOT NULL PRIMARY KEY," 
     + "name varchar(255) NOT NULL," 
     + "type smallint NOT NULL" 
     + ")"; 
Query q = emf.createEntityManager().createQuery(queryStr); 

Tag.java:

@Entity 
@Table(name="TAGS") 
public class Tag implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 4762832549003921169L; 

    @Id 
    @Column(name="id") 
    private int _id; 

    @Basic 
    @Column(name="name") 
    private String _name; 

    @Basic 
    @Column(name="tagtype") 
    private int _tagType; 

    public Tag() { 
     super(); 
    } 

    public Tag(String name, int tagType) { 
     _name = name; 
     _tagType = tagType; 
    } 

錯誤,我得到:

2013-Feb-08 14:15:06.574 ERROR o.h.h.PARSER o.h.h.a.ErrorCounter,56 line 1:1: unexpected token: CREATE 
Exception in thread "main" java.lang.IllegalArgumentException: node to traverse cannot be null! 
    at org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:63) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:280) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) 
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101) 
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80) 
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:98) 
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) 
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) 
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1760) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:268) 

回答