我有一个 Java Web 应用程序,它使用 Hibernate ORM 进行数据库连接。数据库表有很多,主要配置为 hibernate xml 映射文件,即 hbm.xml,其中每个文件都是数据库中的一张表。
现在的问题是,-数据库中有一个用postgreSQl创建的 View ,我想在java中使用该 View ,该怎么做?如果我创建另一个 hbm.xml
文件,该文件将是在数据库中创建的表。我在互联网上阅读了有关如何将其与注释一起使用的示例,但我没有在我的网络应用程序中配置它。
更新1:
经过对以下答案的一些研究和推荐,这就是我的自动取款机:
我创建了 xml
映射文件和一个带有每个属性的 getter/setter 的 java 类:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping>
<class name="org.xxx.model.SearchView" table="search" mutable="false">
<id name="uuId" column="uuid">
</id>
<property name="typeOfCRA" column="typeofcra" />
<property name="birthDate" column="birthDate" />
<property name="lastName" column="lastname" />
<property name="firstName" column="firstname" />
<property name="middleName" column="middlename" />
<property name="recordId" column="recordid" />
<property name="registrationDate" column="registrationdate" />
<property name="state" column="state" />
<property name="organisationunitId" column="organisationunitid" />
<property name="version" column="version" />
<property name="gender" column="gender" />
</class>
</hibernate-mapping>
这就是我在 java 中调用它从数据库获取结果列表的方式:
Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(SearchView.class);
criteria.add(Restrictions.like("typeofcra", "birth"));
List<SearchView> tmp =criteria.list();
它不会给出任何错误。根据我的标准,它不断返回 0 条记录。但是,当我使用相同的条件直接在 Postgresql
中过滤掉它时,它返回了近 600k 个结果。
在编译或运行此代码片段期间,也有 0 个错误。如有任何帮助,我们将不胜感激。
更新2:
hibernate 配置文件:
connection.dialect = org.hibernate.dialect.PostgreSQLDialect
connection.driver_class = org.postgresql.Driver
connection.url = jdbc:postgresql://localhost:5432/finalDb
connection.username = postgres
connection.password = root
connection.schema = update
根据以下答案更新了代码:
Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(SearchView.class);
criteria.add(Restrictions.like("typeOfCRA", "%birth%"));
List<SearchView> tmp =criteria.list();
PgAdmin 内的直接调用有效:
SELECT typeofcra, dateofbirth, lastname, firstname, middlename, recordid,
registrationdate, state, organisationunitid, uuid, version, gender
FROM public.search where typeofcra like '%birth%';
但是从 java 中它不起作用。
最佳答案
根据上面发布的 hibernate 映射文件,您的 SearchView
实体中有 typeOfCRA
字段。问题出在您的限制
上。如果你想执行like
操作,你可以这样做
Session session = sessionFactory.getCurrentSession();
Criteria criteria = session.createCriteria(SearchView.class);
criteria.add(Restrictions.like("typeOfCRA", "%birth%")); //Changed code here
List<SearchView> tmp =criteria.list();
以上查询将获取其中包含 typeofcra
contains birth
的所有记录。如果您想执行不区分大小写的搜索,可以使用 ilike
限制。
Update
问题在于您的 Hibernate 映射文件名。 Hibernate 映射文件名应该与您的实体/类名称相同。 SearchView 类的 hibernate 映射文件名存在拼写错误。将文件名从 Searview.hbm.xml
-> SearchView.hbm.xml
更改,它应该可以解决您的问题
关于java - 如何在Java中将PostgreSQl View 与hibernate连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55770277/