我有一个Spring 4.1.0后端应用程序,其中使用Maven作为构建工具,在JPA(使用Hibernate 4.3.5作为持久性提供程序)中注释了域类。我现在想在这个应用程序中添加一个Web前端组件,并决定使用Grails 3.x作为我的Web框架。我想重新使用我现有的带有Grails的JPA带注释的域类,然后使用generate-all为每个域模型创建控制器和视图。我的第一个里程碑目标是通过此Web应用程序在旧域模型上获得基本的CRUD功能。
根据我发现in the Grails documentation和in some older blog posts的信息以及一些稍微相关的SO帖子,我创建了一个新的Grails项目并将我现有的项目打包为jar并安装它(我跑了< em> mvn install -DskipTests 确切地说,然后将它添加到build.gradle(实际上我只想最终有一个项目,但我想我会先尝试这种方式,因为我不喜欢我想在同一个项目中与Maven和Gradle搏斗):
repositories {
...
mavenLocal()
...
}
dependencies {
...
compile "com.my-company:my-spring-app:1.0.0.CI-SNAPSHOT"
...
}
到目前为止,IntelliJ IDEA 14没有任何警告或错误。然后我创建了grails-app / conf / hibernate / hibernate.cfg.xml文件,并尝试将其中一个旧的JPA注释实体放入其中:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<mapping package="com.my-company.my-spring-app.domain" />
<mapping class="com.my-company.my-spring-app.domain.City" />
</session-factory>
</hibernate-configuration>
此处也没有来自IDE的投诉。 City.java实体类看起来像:
package com.my-company.my-spring-app.domain;
import javax.persistence.*;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
/**
* City generated by hbm2java
*/
@Entity
@Table(name = "city",
schema = "public",
uniqueConstraints = @UniqueConstraint(columnNames = "name"))
public class City implements java.io.Serializable {
private static final long serialVersionUID = 4674557242772722625L;
@Id
@SequenceGenerator(name = "city_gen",
schema = "public",
sequenceName = "city_id_seq")
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "city_gen")
@Column(name = "id",
unique = true,
nullable = false)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "countryid",
nullable = false)
// @JoinColumn(name = "country_id", nullable = false)
private Country country;
@Column(name = "name",
unique = true,
length = 200)
private String name;
...
}
然后我跳进Grails控制台并尝试为City域类生成控制器和视图:
grails generate-all com.my-company.my-spring-app.domain.City
但我刚收到一个未找到Domain类的错误:
| Error domain class not found for name com.my-company.my-spring-app.domain.City
我很快创建了一个Grails 2.5.0应用程序,将my-spring-app.jar放入lib /并再试一次,看看它是否与“流行边缘”Grails 3.0.1有关但是得到了同样的问题结果
有谁知道这里发生了什么?如何在Grails 3.x中重复使用旧的JPA域类,以便只使用一组域实体来保持DRY?
答案 0 :(得分:0)
我通过将mtd_partitions
放入hibernate.cfg.xml
(不在hibernate子目录中)来解决类似问题,如mapping-with-hibernate-annotations-in-grails-3-0-1中所述。