【问题标题】:Spring Roo referencedColumnNames not mapped to a single propertySpring Roo 引用的ColumnNames 未映射到单个属性
【发布时间】:2011-09-11 18:54:44
【问题描述】:

我正在尝试 Roo 数据库逆向工程,但我的第一个真实数据库出现问题。对于这个问题,我创建了一个显示问题的最小示例。在数据库中有一个 sl_person 表、一个 sl_group 表和一个桥表 sl_person_group,因为一个人可以属于 0 个或多个组。

CREATE DATABASE `rooperson` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE IF NOT EXISTS `sl_group` (
`id_group` int(11) NOT NULL DEFAULT '0',
`name` varchar(80) NOT NULL,
`description` text,
UNIQUE KEY `id_group_idx` (`id_group`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `sl_person` (
`id_person` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) DEFAULT NULL,
`surname` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id_person`),
KEY `name` (`name`),
KEY `surname` (`surname`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5727 ;

CREATE TABLE IF NOT EXISTS `sl_person_group` (
`id_person` int(11) NOT NULL DEFAULT '0',
`id_group` int(11) NOT NULL DEFAULT '0',
UNIQUE KEY `id_person_group_idx` (`id_person`,`id_group`),
KEY `id_group` (`id_group`)
) ENGINE=InnoDB DEFAULT CHARSET;

ALTER TABLE `sl_person_group`
ADD CONSTRAINT `sl_person_group_ibfk_2` FOREIGN KEY (`id_group`) REFERENCES `sl_group` (`id_group`),
ADD CONSTRAINT `sl_person_group_ibfk_1` FOREIGN KEY (`id_person`) REFERENCES `sl_person` (`id_person`);

在 Eclipse 中,我使用 Spring Source Tool Suite 创建了一个新的 Spring Roo 项目:文件 -> 新建 -> 项目 -> Spring Roo 项目

Project Name: rooperson
Top level package name: org.obliquid.rooperson
Next -> Finish

然后在 roo shell 中输入:

persistence setup --database MYSQL --provider HIBERNATE
database properties set --key database.password --value xxxxx
database properties set --key database.username --value rooperson
database properties set –key database.url –value jdbc:mysql://localhost/rooperson?zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8
database reverse engineer --schema PUBLIC --package org.obliquid.rooperson.domain
web mvc setup

然后我修复了a small problem with stylesheets

但是,当我尝试启动 GlasshFish 3.1.1 时,应用程序无法启动并出现以下错误。

信息:2011-09-11 20:42:59,562 [admin-thread-pool-4848(3)] 错误 org.springframework.web.context.ContextLoader - 上下文初始化失败 org.springframework.beans.factory.BeanCreationException:创建名为“transactionManager”的bean时出错 在文件 [/usr/local/glassfish3/glassfish/domains/domain1/eclipseApps/rooperson/WEB-INF/classes/META-INF/spring/applicationContext.xml] 中定义: 设置 bean 属性“entityManagerFactory”时无法解析对 bean“entityManagerFactory”的引用; 嵌套异常是 org.springframework.beans.factory.BeanCreationException: 创建文件中定义的名称为“entityManagerFactory”的bean时出错 [/usr/local/glassfish3/glassfish/domains/domain1/eclipseApps/rooperson/WEB-INF/classes/META-INF/spring/applicationContext.xml]: 调用 init 方法失败;嵌套异常是 org.hibernate.AnnotationException: referencedColumnNames(id_group) org.obliquid.rooperson.domain.SlPersonGroup.idGroup 引用 org.obliquid.rooperson.domain.SlGroup 未映射到单个属性 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)

生成的文件 SlPersonGroup_Roo_DbManaged.aj 以:

privileged aspect SlPersonGroup_Roo_DbManaged {

    @ManyToOne
    @JoinColumn(name = "id_group", referencedColumnName = "id_group", nullable = false, insertable = false, updatable = false)
    private SlGroup SlPersonGroup.idGroup;

    @ManyToOne
    @JoinColumn(name = "id_person", referencedColumnName = "id_person", nullable = false, insertable = false, updatable = false)
    private SlPerson SlPersonGroup.idPerson;

我该如何解决这个问题?如果我应该提供更多信息,请告诉我。

【问题讨论】:

  • 有同样的问题。你想清楚了吗?如果是这样,如果你愿意分享,我会很高兴。
  • 不,我没有...我会在 Roo 1.2 发布时再试一次。

标签: java hibernate spring spring-roo


【解决方案1】:

这里有类似的问题。这个版本的 Roo 似乎在复合主键方面存在问题(如在您的 sl_person_group 表中)。

虽然使键引用单个列会阻止这种情况发生,但不幸的是,这可能不是您的数据模型所要求的。

【讨论】:

    猜你喜欢
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多