1

我正在尝试通过我的 grails 应用程序中的休眠 xml 映射配置来映射 POJO。这在 grails 2.x 版本中运行良好,但在 grails 4 中它不采用位于位置的休眠配置:

grails-app/conf/hibernate.cfg.xml

这是:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        '-//Hibernate/Hibernate Configuration DTD 3.0//EN'
        'http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd'>

<hibernate-configuration>

    <session-factory>
        <mapping resource='com.prabin.test.hbm.xml'/>
    </session-factory>

</hibernate-configuration>

com.prabin.test.hbm.xml 也与 hibernate.cfg.xml 位于同一位置

com.prabin.test.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.prabin.Prabin" table="prabin">
        <id name="id" column="prabin_id">
            <generator class="identity"/>
        </id>
    </class>
</hibernate-mapping>

我的 Pojo 位于:

src/main/java/com/prabin/Prabin.java

这是:

package com.prabin;

public class Prabin {
    Integer  id;

    // Getters and Setters
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
}

应用程序没有采用休眠配置文件,因此没有为我的 pojo 创建任何表。Hibernate 配置文件被完全忽略。

4

1 回答 1

0

Grails 支持团队帮我解决了这个问题,过程如下:

hibernate 映射文件:hibernate.mapping.xml应该在/src/main/resources目录中,并在 application.yml 中映射如下:

hibernate:
    mappingLocations: classpath:hibernate.mapping.xml

注意:实体文件应该是一个 groovy 文件,映射@Entity并继承接口GormEntity注释以支持 Groovy 的动态查找器。

例子 :

@Entity
class Employee implements GormEntity<Employee> {
    Integer id
    String firstName
    String lastName
    Double salary
}

休眠映射:

<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name = "com.objectcomputing.example.Employee" table = "EMPLOYEE">

        <meta attribute = "class-description">
            This class contains the employee detail.
        </meta>

        <id name = "id" type = "int" column = "id">
            <generator class="native"/>
        </id>

        <property name = "firstName" column = "first_name" type = "string"/>
        <property name = "lastName" column = "last_name" type = "string"/>
        <property name = "salary" column = "salary" type = "double"/>

    </class>
</hibernate-mapping>

这是完整的工作示例:grails-hibernate-xml-config-example

于 2021-03-03T06:59:01.367 回答