java - 如何在Java中将PostgreSQl View 与hibernate连接?

标签 java postgresql hibernate

我有一个 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/

相关文章:

java - PointerByReference 不返回值

java - 我的代码无限循环并且不再提示用户

java - 使用Java代码在Unix服务器上创建一个具有读写可执行权限的文件夹?

sql - 增量 DISTINCT/GROUP BY 操作

sql - 如何快速 self 加入(与不同的相同)?

java - 如何使用postman或feign客户端在Spring boot中设置@RequestAttribute的值

sql - SQL中如何只选择实数数据

java - Hibernate 搜索 4.4.2 按日期排序不起作用

具有模式属性的 Java Hibernate Generic DAO

java - JPA 条件插入