Postgresql jpa创建表
我让应用程序连接到postgres数据库,我需要创建一个临时表来存储数据,然后在作业结束时删除该表 我正在使用JPA,但它似乎需要在DB中预先创建表,我不想添加额外的工作来编写sql脚本,并且必须在运行作业之前将其运行到setup table,因此我在JPA查询中创建表,然后执行常规CRUD操作,但它不起作用,这是因为JPA无法动态创建表吗?我必须先创建表吗?这是我的密码:Postgresql jpa创建表,postgresql,jpa,Postgresql,Jpa,我让应用程序连接到postgres数据库,我需要创建一个临时表来存储数据,然后在作业结束时删除该表 我正在使用JPA,但它似乎需要在DB中预先创建表,我不想添加额外的工作来编写sql脚本,并且必须在运行作业之前将其运行到setup table,因此我在JPA查询中创建表,然后执行常规CRUD操作,但它不起作用,这是因为JPA无法动态创建表吗?我必须先创建表吗?这是我的密码: Map<String, String> properties = Maps.newHashMap(); pro
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);
我得到的错误是:
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)
2013-Feb-08 14:15:06.574错误o.h.h.PARSER o.h.h.a.ErrorCounter,56行1:1:意外令牌:创建
线程“main”java.lang.IllegalArgumentException中的异常:要遍历的节点不能为null!
位于org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:63)
位于org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:280)
位于org.hibernate.hql.ast.QueryTranslatorImpl.docomfile(QueryTranslatorImpl.java:182)
位于org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
在org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:101)
在org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:80)
位于org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:98)
位于org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
位于org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
位于org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1760)
位于org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:268)
EntityManager.createQuery()
将JPQL查询作为参数。不是SQL查询
如果要执行SQL查询,请使用
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)