복붙노트

[SPRING] Grails 3.x : JPA / Hibernate 도메인 클래스 재사용 : 도메인 클래스를 찾을 수 없음

SPRING

Grails 3.x : JPA / Hibernate 도메인 클래스 재사용 : 도메인 클래스를 찾을 수 없음

Spring 클래스 4.1.0 백엔드 애플리케이션에서 Maven을 빌드 도구로 사용하여 JPA (영속 프로 바이더로서 최대 절전 모드 4.3.5)에 주석 처리 된 도메인 클래스가 있습니다. 이제이 애플리케이션에 웹 프런트 엔드 구성 요소를 추가하고 Grails 3.x를 웹 프레임 워크로 사용하기로 결정했습니다. Grails로 기존의 JPA 주석이 달린 도메인 클래스를 재사용하고 generate-all을 사용하여 각 도메인 모델에 대한 컨트롤러와 뷰를 생성하고 싶습니다. 내 첫 번째 목표는이 웹 앱에서 이전 도메인 모델에 대한 기본 CRUD 기능을 얻는 것입니다.

Grails 문서와 일부 오래된 블로그 게시물뿐만 아니라 약간의 관련 게시물에 대한 정보를 따라 새로운 Grails 프로젝트를 작성하고 기존 프로젝트를 jar로 패키징하고 설치했습니다 (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

하지만 난 그냥 오류 도메인 클래스를 찾을 수 없습니다 :

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

나는 Grails 2.5.0 애플리케이션을 신속하게 만들었고, lib /에 my-spring-app.jar 파일을 넣었다. 그리고이 파일을 '최첨단의'Grails 3.0.1에서 문제가 있었는지 알아보기 위해 다시 시도했지만 같은 결과를 얻었다.

아무도 여기서 무슨 일이 일어나는 지 알아? Grails 3.x에서 예전의 JPA 도메인 클래스를 재사용하여 하나의 도메인 엔티티만으로 DRY 상태를 유지하려면 어떻게해야합니까?

해결법

  1. ==============================

    1.hibernate-annotations-in-grails-3-0-1에 설명 된대로 hibernate.cfg.xml을 grails-app / conf (hibernate 하위 디렉토리가 아닌)에 넣음으로써 유사한 문제를 해결했습니다.

    hibernate-annotations-in-grails-3-0-1에 설명 된대로 hibernate.cfg.xml을 grails-app / conf (hibernate 하위 디렉토리가 아닌)에 넣음으로써 유사한 문제를 해결했습니다.

  2. from https://stackoverflow.com/questions/29908232/grails-3-x-re-using-jpa-hibernate-domain-classes-domain-class-not-found by cc-by-sa and MIT license