我试图让一个Java8EE应用程序在Wildfly10和Postgres 9.6.6上运行。
不知怎的,我总是碰到一个错误,那就是找不到关系。
我的Postgres在本地主机上运行,默认端口。我正在连接用户postgres和正确的密码。数据库(hbnac)有一个同名的架构。
Wildfly配置为使用数据库,“测试连接”正在确认连接成功。
使用pgAdmin 4,我还可以浏览数据库、查看模式以及表组成员。
Jboss中的配置如下:

<datasource jta="false" jndi-name="java:jboss/datasources/hbnac" pool-name="hbnac" enabled="true" use-ccm="false">
                <connection-url>jdbc:postgresql://localhost:5432/hbnac</connection-url>
                <driver-class>org.postgresql.Driver</driver-class>
                <driver>postgres</driver>
                <pool>
                    <min-pool-size>1</min-pool-size>
                    <initial-pool-size>1</initial-pool-size>
                    <max-pool-size>10</max-pool-size>
                    <flush-strategy>Gracefully</flush-strategy>
                </pool>
                <security>
                    <user-name>postgres</user-name>
                    <password>password</password>
                </security>
                <validation>
                    <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
                    <background-validation>true</background-validation>
                    <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
                </validation>
            </datasource>

但是,我的应用程序未能从同一个表中选择记录,导致以下错误:
Caused by: org.postgresql.util.PSQLException: ERROR: relation "group_member" does not exist

my persistence.xml的配置正在对Wildfly中定义的连接执行jndi查找:
<persistence-unit name="hbnac">
    <jta-data-source>java:jboss/datasources/hbnac</jta-data-source>

    <class>hbnac.birthday.domain.groupmember.GroupMember</class>

    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL94Dialect" />
        <!--property name="hibernate.hbm2ddl.auto" value="validate"/-->
        <!--property name="hibernate.default_schema" value="hbnac"/-->

        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="true" />
    </properties>

</persistence-unit>

显然,jta数据源与Wildfly中的工作数据源相匹配。如您所见,我对validate(在启动时由于同样的原因失败)和schema名称做了一些试验,这也没有什么区别。
实体itsel被注释:
@Entity
@Table(name = "group_member")
public class GroupMember extends AbstractEntity {

public final static String FACEBOOK_NAME_FIELD = "facebookName";
public final static String BIRTHDAY_FIELD = "birthday";

@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private long id;

它对所有可用字段都有getter、setter、hashcode和equals方法。
如果我将hibernate生成的查询复制到pgadmin中,它也可以完美地工作。。。
还有什么想法吗?
postgresql - 带有Postgres 9.6.6和Hibernate 5.2.12.final的Wildfly 10-LMLPHP

最佳答案

测试连接成功,但甚至找不到表
这表明,架构设置可能未正确定义。
那么,应该放一个这样的currentSchema

<connection-url>jdbc:postgresql://localhost:5432/hbnac?currentSchema=hbnac</connection-url>

如果使用Hibernate发出查询,则应启用此注释路由代码
<!--property name="hibernate.default_schema" value="hbnac"/-->

10-06 05:12
查看更多