java - 将实体映射到 native SQL 查询

标签 java hibernate jpa orm ejb

是否可以将 SQL Native 查询(而不是表)与没有注释的实体映射(使用 XML 配置)?

我知道我可以在数据库中创建一个 View 并将该 View 映射为解决此问题的方法,但我尝试避免使用此解决方案,因为架构是从实体模型自动生成的,并且我必须创建 View 之后手动。

我也知道注释存在类似 @SqlResultSetMapping 的东西,但我不允许使用注释。

最佳答案

要使用 Hibernate 将旧表映射到实体上,您可以使用如下所示的 DAO 方法:

public List<Audit> getAudits(Integer branchId, Integer locationId, Date fromDate, Date toDate, int first, int count, String sortProperty, boolean ascending) {

    // columns renamed to match sort properties and hibernate mapping
    StringBuilder query = new StringBuilder(
        "SELECT AUD_Number AS number,"
        + " AUD_Number_REL AS relationNumber,"
        + " AUD_Name_REL AS relationName,"
        + " AUD_Date AS date,"
        + " FROM audit WHERE 1");
        if (branchId!= null) {
            query.append(String.format(" AND AUD_Number_BRN = %s", branchId));
        }
        if (locationId!= null) {
            query.append(String.format(" AND AUD_Nummer_LOC = %s", locationId));
        }
        if (fromDate != null) {
            query.append(String.format(" AND AUD_Date >= %s", DateConverter.dateToSql(fromDate)));
        }
        if (toDate != null) {
            query.append(String.format(" AND AUD_Date <= %s", DateConverter.dateToSql(toDate)));
        }
        query.append(String.format(" ORDER BY %s %s", sortProperty, ascending ? "ASC" : "DESC"));
        query.append(String.format(" LIMIT %s, %s", first, count));
        return (List<Audit>) getSession().createSQLQuery(query.toString()).addEntity(Audit.class).list();
}

同时在mappings.hbm.xml中:

<class name="Audit">
    <id name="number" type="integer" />
    <property name="relationNumber" type="integer" />
    <property name="relationName" type="string" />
    <property name="date" type="datetime" />
</class>
etc...

为简洁起见,省略 spring 上下文。

这有帮助吗?

关于java - 将实体映射到 native SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7330245/

相关文章:

java - 将 32 字节十六进制字符串转换为 16 字节十六进制值字符串

java - Hibernate ManyToMany 和父类(super class)映射问题

java - 如何在同一 hibernate session 中从数据库表获取更新的值

eclipse - Persistence.xml 放在 eclipse 项目的什么位置

spring - Spring Data JPA 如何在内部工作

java - 生成并播放声音信号

java - 如何评估 "double negative"句子的情绪

Java- hibernate : Generate sequence column based on another field

java - 组织.hibernate.PersistentObjectException : detached entity passed to persist exception

java - 不使用 xhtml 时填充 IceFaces HtmlSelectOneListbox