- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Spring 中有一个复杂的、自定义配置的 Hibernate 设置(包括 JPA 实体、 session 工厂和数据源定义),我想在 Grails 2.1.0 中使用它。正因为如此,我想给 Grails 一个对 sessionFactory
的引用。和dataSource
我已经有了。所以,我不想(事实上,不能)使用 hibernate.cfg.xml
位于conf/
- 我也不想使用DataSource.groovy
,因为所有复杂的配置已经由我们已经拥有的经过测试和工作的代码处理,并且都是基于 Spring 的。
所以,我已经成功地将我的自定义 Spring 配置加载到 grails run-app
上。 (通过importBeans()
中的resources.groovy
。)在日志中,我可以看到数据库连接,Spring配置和Hibernate启动得很好,所以在运行时bean到sessionFactory
并发送至dataSource
被创建。 现在,我如何配置 Grails 来使用它们而不是尝试创建自己的?
理想情况下类似dataSource = ref('myDataSource')
某个地方会很棒 - 与 sessionFactory = ref('sessionFactory')
相同或类似的。我看到有些人将其放入 resources.groovy 中,但它不起作用。
我也见过这个:
eventDao(com.JavaClassRequiringDataSource) { dataSource = ref('dataSource') }
但它也不起作用(不确定是否曾经起作用。)
如果有任何帮助,我们将不胜感激……我花了过去 10 个小时试图让它发挥作用,但没有成功。我不介意失去一些 Grails 功能,只要它能工作。直接目标是让 GORM 看到我们已经拥有的(约 200 个)实体并做一些脚手架:)
我还知道 Grails 看不到这些实体,因为我已将以下内容添加到 BootStrap.groovy:
// ...
def grailsApplication
def init = { servletContext ->
println grailsApplication.domainClasses
}
// ...
它会打印 []。
如果需要补丁,请告诉我从哪里开始,我会看一下......我只是想让它正常工作。
谢谢!
更新1:
我已经尝试了 resources.groovy 文件的几种咒语,目前它看起来像这样:
beans = {
importBeans('main-spring-file-for-the-rest.xml')
dataSource = ref('dataSource')
}
但是当尝试搭建脚手架时,我仍然得到:
Error 2012-09-06 00:02:00,768 [Thread-9] ERROR plugins.DefaultGrailsPlugin - Cannot generate controller logic for scaffolded class x.y.z.Class. It is not a domain class!
(已编辑的日志行:将类的实际名称替换为 x.y.z.Class
。)正如我之前所示,实体列表是空的,我看不到设置 Hibernate sessionFactory
的方法。 - 例如
sessionFactory = ref('sessionFactory')
不起作用。
更新2:
通过从 spring 加载 bean 和实体,但 GORM 没有使用或看到这些 bean 和实体,我能够使用 Grails 中内置的实用程序和新 bean(从 resources.groovy
配置)强制转换实体。因此:
public class TestFix implements ApplicationContextAware {
SessionFactory sessionFactory
ApplicationContext applicationContext
GrailsApplication grailsApplication
def init() {
GrailsHibernateUtil.configureHibernateDomainClasses(sessionFactory, "sessionFactory", grailsApplication)
}
}
beans = {
importBeans('main-spring-file-for-the-rest.xml')
myBean(TestFix) { bean ->
sessionFactory = ref('sessionFactory')
grailsApplication = ref(GrailsApplication.APPLICATION_ID)
bean.initMethod = 'init'
}
}
现在,Grails 可以看到这些实体,但脚手架不起作用,因为增强的域对象似乎缺少 GORM 方法(.list() 等)。您可能会期望 GrailsHibernateUtil.configureHibernateDomainClasses()
在创建所有 GrailsHibernateDomainClass
时添加这些方法类,但要么它默默地失败,要么我错过了一些东西(也许运行得不够早?不确定。)非常感谢任何帮助。
最佳答案
您是否尝试过使用 db-reverse-engineer 插件来实现相反的方法?我们在将相当复杂的 Spring 应用程序迁移到 grails(大约 90 个实体)方面取得了巨大成功。
关于spring - Grails 2.1 : Setting sessionFactory and dataSource from custom Spring configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12283868/
我使用 hibernate 作为持久层来与数据库通信。我使用 maven 插件 hbm2java 来生成 dao、java、*hbm.xml 和 hibernate.cfg.xml。直到那个时候插件工
我想知道上面提到的 hibernates sessionfactory 类的两种方法之间的概念差异,如果可以通过简单的例子。 最佳答案 前者打开一个正常(有状态) session ,而后者(可能不足为
我正在关注 spring doc entry关于在独立应用程序中以编程方式设置我的应用程序上下文。 主要内容: public class Reporter { public static vo
如果我在结束时用 Session.getCurrentTransaction().commit() 关闭 session 或用 session.close() 关闭 session 会发生什么方法?
我正在尝试在我的 Spring 应用程序中使用 Hibernate 进行 Db 访问。但是现在,我收到以下错误: Could not locate SessionFactory in JNDI jav
我在基于 Java 的配置中使用 Hibernate 和 Spring。我的配置文件是这个: @Bean @Autowired public HibernateTransactionManager t
下面的代码不起作用。问题是事务没有在数据库中提交 案例1: @Transactional public void save(Person p) {
我对这两者有点困惑。据我所知,两者都返回 hibernate session ,SessionFactory.getCurrentSession()返回基于属性 的上下文 session 这是在 h
Image 错误: 1) AdminModel.java - 模型类。 2) HibernateUtil.java 促进 Hibernate DB 连接。 3) AdminDAO.java - 你们知
我遇到此错误,我找不到解决方案 我在Grails中使用postgres 这是不断发生的错误 org.springframework.beans.factory.BeanCreationExceptio
我需要 Hibernate 的一个特定功能,即 StatelessSession,为此我需要 Hibernate 的 SessionFactory。问题是我只有entityManagerFactory
我正在开发 jsf 应用程序并使用 hibernate 作为后端。我想创建 session 工厂并在整个应用程序中关闭它一次。我正在使用 util 类创建 session 工厂。 import org
我正在通过读取项目外部的属性文件来创建 session 工厂。我的属性文件如下, hibernate.connection.driver_class=com.mysql.jdbc.Driver hib
我们有一种情况,我们有多个具有相同模式的数据库,但每个数据库中的数据不同。我们正在创建一个 session 工厂来处理这个问题。 问题是我们不知道我们将连接到哪个数据库,直到运行时我们可以提供它。但是
在我的应用程序中,当我需要在这些方法中访问我的数据库时,我一直在我的方法参数中传递我的 SessionFatory。它在我的 Controller 中实例化,使用: @Autowired privat
我对 DataSource 和 SessionFactory 之间的区别感到困惑。 我认为SessionFactory是一个用于检索 session 的管理器(我猜这实际上是与数据库的连接)。 Dat
我正在尝试学习 spring 3 和 DAO 和 BO 类以及如何使用它进行 Autowiring ,我想知道这是连接 sessionFactory 的正确方法,因为我已经读到它更好地使用 publi
我正在将旧应用程序移植到 Hibernate 5,但在登录阶段遇到了问题。这是它的工作原理(我无法更改): 用户最初使用通用登录名/密码(所有用户相同)连接到 oracle DB 然后用户运行“登录”
根据文档,SessionFactory 应该是线程安全的: An ISessionFactory is threadsafe, many threads can access it concurren
如何使用 java 配置创建 SessionFactory? @Bean public SessionFactory sessionFactory(){ AnnotationSessionFa
我是一名优秀的程序员,十分优秀!