2015-04-28 34 views
3

我有一个Spring 4.1.0后端应用程序,并在JPA中注释了域类(w/Hibernate 4.3.5作为持久性提供程序)使用Maven作为构建工具。我现在想为这个应用程序添加一个Web前端组件,并决定将Grails 3.x用作我的Web框架。我想在Grails中重新使用现有的带有JPA批注的域类,然后使用generate-all为每个域模型创建控制器和视图。我的第一个里程碑目标是从这个Web应用程序获取旧域模型的基本CRUD功能。Grails 3.x:重新使用JPA/Hibernate Domain类:未找到域类

接着我发现in the Grails documentationin some older blog posts以及SO帖子微微有些相关,我创建了一个新的Grails项目,并打包了我现有的项目作为一个jar和安装它的信息(我跑MVN安装-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.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的控制台,并试图产生的市域级控制器和视图:

grails generate-all com.my-company.my-spring-app.domain.City 

但我只是得到未找到域类错误:

| Error domain class not found for name com.my-company.my-spring-app.domain.City 

我快速创建一个Grails应用程序2.5.0,把我的弹簧-app.jar中的lib /,并再次尝试这个,看看它是否是一个n与Grails 3.0.1的'出血端'问题有关,但得到了相同的结果。

有人知道这里发生了什么吗?我如何在Grails 3.x中重新使用旧的JPA域类,以便只使用一组域实体就能保持DRY?

回答

0

我解决了一个类似的问题,把hibernate.cfg.xml放在grails-app/conf(不在hibernate子目录中),如mapping-with-hibernate-annotations-in-grails-3-0-1所述。

+0

我刚刚给了这个尝试,但不幸的是它并没有为我工作。我得到和以前一样的错误。无论如何,感谢Georgios! – eljaydub