在 Grails 中使用 JPA 域类

2022-09-02 04:49:27

我想在使用最新的 Grails 里程碑 (2.0.0.M1) 开发的应用程序中使用 JPA 域模型。JPA 域类位于应用程序的目录中。src\java

基于这篇描述如何在 Grails 应用中使用现有 JPA 域模型的博客文章,我创建了一个 JPA 注释类的列表。grails-app/conf/hibernate/hibernate.cfg.xml

如果有人无聊到想要自己运行该应用程序,则可以在此处获得。运行应用程序时,启动时发生以下错误

Error 2011-08-04 23:28:19,777 [Thread-8] ERROR context.GrailsContextLoader  - Error executing bootstraps: Error creati
ng bean with name 'grailsDomainClassMappingContext': Instantiation of bean failed; nested exception is org.springframewo
rk.beans.BeanInstantiationException: Could not instantiate bean class [org.codehaus.groovy.grails.domain.GrailsDomainCla
ssMappingContext]: Constructor threw exception; nested exception is java.lang.NullPointerException
   Line | Method
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|   138 | run      in java.util.concurrent.FutureTask
|   886 | runTask  in java.util.concurrent.ThreadPoolExecutor$Worker
|   908 | run      in     ''
^   662 | run . .  in java.lang.Thread

Caused by BeanInstantiationException: Could not instantiate bean class [org.codehaus.groovy.grails.domain.GrailsDomainCl
assMappingContext]: Constructor threw exception; nested exception is java.lang.NullPointerException
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|   138 | run      in java.util.concurrent.FutureTask
|   886 | runTask  in java.util.concurrent.ThreadPoolExecutor$Worker
|   908 | run      in     ''
^   662 | run . .  in java.lang.Thread

Caused by NullPointerException: null
->> 123 | addPersistentEntityInternal in org.grails.datastore.mapping.model.AbstractMappingContext
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|   115 | addPersistentEntity in     ''
|   127 | addPersistentEntityInternal in     ''
|   115 | addPersistentEntity in     ''
|   127 | addPersistentEntityInternal in     ''
|   115 | addPersistentEntity in     ''
|   303 | innerRun in java.util.concurrent.FutureTask$Sync
|   138 | run      in java.util.concurrent.FutureTask
|   886 | runTask  in java.util.concurrent.ThreadPoolExecutor$Worker
|   908 | run      in     ''
^   662 | run . .  in java.lang.Thread

奇怪的是,这个问题似乎只是由与其他域类有关系的域类触发的。如果删除除(不引用其他域类)之外的所有域类,则应用将启动而不会出错。SystemProperty


答案 1

尝试使用(示例)(我不知道究竟在哪里放置它,但它最终应该转到,并将你的jar文件包含在那里(在元素中)。然后,您当然需要所有相应的弹簧豆(例如)META-INF/persistence.xmlWEB-INF/META-INF/persistence.xml<jar-file>LocalEntityManagerFactoryBean


答案 2

1.3.7 文档

只需将映射文件放入 grails-app/conf/hibernate 中,然后将 Java 文件放在 src/java 中,或者(如果域模型存储在 JAR 中)将打包的类放入项目的 lib 目录中。

我没有在你的源代码目录中看到你的jar。会是这样吗?lib


推荐