Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动生成的Java ee应用程序未连接到PostgreSQL_Postgresql_Jpa_Netbeans - Fatal编程技术网

自动生成的Java ee应用程序未连接到PostgreSQL

自动生成的Java ee应用程序未连接到PostgreSQL,postgresql,jpa,netbeans,Postgresql,Jpa,Netbeans,我已经用NetBeans 11.2创建了一个web应用程序。这个IDE可以从DB表自动生成java类。我尝试使用此功能,并从本地PostgreSQL server上运行的数据库的表Clients中获取了文件Clients.java、ClientsController.java和ClientsFacade.java。这些java文件用于在表中添加、删除记录,列出记录等等,我已经知道了,没关系 ClientsFacade.java如下所示: package com.simplebank.web; 导

我已经用NetBeans 11.2创建了一个web应用程序。这个IDE可以从DB表自动生成java类。我尝试使用此功能,并从本地PostgreSQL server上运行的数据库的表
Clients
中获取了文件
Clients.java
ClientsController.java
ClientsFacade.java
。这些java文件用于在表中添加、删除记录,列出记录等等,我已经知道了,没关系

ClientsFacade.java
如下所示:

package com.simplebank.web;
导入javax.ejb.Stateless;
导入javax.persistence.EntityManager;
导入javax.persistence.PersistenceContext;
@无国籍
公共类ClientsFacade扩展了AbstractFacade{
@PersistenceContext(unitName=“my_persistence_unit”)
私人实体管理者;
@凌驾
受保护的EntityManager getEntityManager(){
返回em;
}
公共客户端facade(){
超级(Clients.class);
}
}
据我所知,参数“my_persistence_unit”指向某个JDBC连接。我在我的项目中找到了
persistence.xml
文件,其中也提到了此参数,并对其进行了编辑:


com.simplebank.web.Accounts
com.simplebank.web.Clients
JDBC连接的所有参数都是正确的,我保证这一点。但在构建项目后,我尝试在GlassFish服务器中打开facelet
clients/List.xhtml
,并收到错误消息:

javax.ejb.EJBException
    at com.sun.ejb.containers.EJBContainerTransactionManager.processSystemException(EJBContainerTransactionManager.java:728)
    at com.sun.ejb.containers.EJBContainerTransactionManager.completeNewTx(EJBContainerTransactionManager.java:678)
    at com.sun.ejb.containers.EJBContainerTransactionManager.postInvokeTx(EJBContainerTransactionManager.java:483)
    at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4576)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2084)

...

Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.7.4.v20190115-ad5b7c6b2a): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: Schema 'STUDENT' does not exist
Error Code: 30000
Call: SELECT id AS a1, family AS a2, name AS a3, pass_number AS a4, pass_series AS a5 FROM clients OFFSET ? ROWS FETCH NEXT ? ROWS ONLY 
    bind => [2 parameters bound]
Query: ReadAllQuery(referenceClass=Clients sql="SELECT id AS a1, family AS a2, name AS a3, pass_number AS a4, pass_series AS a5 FROM clients OFFSET ? ROWS FETCH NEXT ? ROWS ONLY ")
    at org.eclipse.persistence.internal.jpa.QueryImpl.getDetailedException(QueryImpl.java:391)
    at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:264)
    at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:482)
    at com.simplebank.www.AbstractFacade.findRange(AbstractFacade.java:53)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

...
再来一次:schema STUDENT不存在(!)。我可以使用
psql
实用程序(
PGPASSWORD=“blah blah”psql-U student
)查看它和其中的所有表格。我还编写了一个简单的java程序,用传统的方式(JDBC驱动程序)连接到数据库,运行良好。此外,当GlassFish服务器启动时,我在调试区域看到一行:

  /file:/home/3f-lab/_ide/NETBEANS/web/target/web-1.0/WEB-INF/classes/_my_persistence_unit login successful|#]"

但facelet不起作用。请给我解释一下我做错了什么。

我自己解决了这个问题。原因是默认连接池中的(IMHO),该连接池在GlassFish(或在NetBeans?)中设置为DerbyDB连接。我已经添加了与我的PostgreSQL数据库相关的新连接池,在GlassFish管理控制台中更改了默认值,我的web应用程序现在可以正常工作了。我可以查看和编辑表和记录。

检查jdbc url中提供的数据库名称是否正确,以及检查学生表是否位于其他模式中(而不是使用postgresql数据库时位于公共模式中),url是否绝对正确<代码>jdbc:postgresql://localhost:5432/student。现在“student”既是模式名又是表名。有这样一个模式名是很奇怪的。通常,它有一个更通用的名称,如“companyname”或“default”。尝试
jdbc:p的URLostgresql://localhost:5432
。这根本不是JSF的问题,所以我删除了JSF标记。@BalusC:URL中的
student
指的是具有该名称的数据库,而不是模式。“JDBC连接的所有参数都是正确的,我保证这一点”-所以您创建了一个名为
student
的数据库?伙计们,我尝试了许多不同的数据库名称,模式和用户。例如,在开始的数据库中命名为
bank
、schema
public
和user
student
。不管这些名称如何,结果总是一样的:连接通过简单的
JDBC
psql
实用程序工作,但在GlassFish中不起作用。最后,为了简单起见,我命名了所有三个参数(db、use和schema)
student
(Postgres包含相关对象),但错误再次出现。