0

我是 Spring Roo 的新手,希望构建一个应用程序。我需要有组合框来选择字符串字段中的值——这是一个相当普遍的要求。Spring Roo Pizza 示例使用枚举数据类型显示了这一点enum constant,但我要求管理员可以编辑源值(即在表中),以便我们将来可以更改这些值。此外,我更喜欢使用单个表来包含所有这些列表,以便于维护。

我知道我想要生成列表的 SQL 类似于:

从 listTable 中选择 listvals,其中 listtype = “status”;

然后,我的下拉框会显示如下内容:活动、非活动。用户将选择一个,字符串“Active”将存储在目标字段中。在第二个示例中,我们可能会使用:

从 listTable 中选择 listvals,其中 listtype = “State”;

第二个下拉框将显示如下内容:阿拉斯加、加利福尼亚、佛罗里达。用户将选择一个,字符串“Florida”将存储在目标字段中。

我的核心问题是如何在 Roo 中实现这种功能?

使用 Pizza Shop 快速入门作为沙箱,我尝试定义目标字段,例如:

我将:更改field reference --fieldName base --type ~.domain.Base 为:

field reference --fieldName base --type ~.domain.Base --referencedColumnName name

返回此错误: @JoinColumn name is required if specifying a referencedColumnName

最初的问题是,此时 roo 尚未为 db 创建行 ID 列,因此我不知道 Base 表上连接列的名称。但是,如果我等到使用 1:M 连接运行脚本之后,pizza.base 列将被定义为整数,而不是我想要的字符串。

因此,我运行了香草披萨店 roo 脚本并询问了香草 db。(roo 是否生成了一个我可以查看的用于创建数据库的 SQL 脚本?)事实证明,roo 将行 id 列“id”命名为 BigInt。(我还注意到它似乎没有利用 postgres 推荐的主索引/行 ID 的 SEQUENCE 功能。)

所以现在我运行:

field reference --fieldName base --type ~.domain.Base --referencedColumnName name --joinColumnName id

罗喜欢这个!
直到我perform tests在 Surefire 报告中抛出了一些无法解读的错误。

我注意到解决这个问题只是满足我上述总体要求的第一步。第 2 步将尝试在引用语句中注入某种过滤器或 where 子句。我怀疑这与--fetch选项有关(Roo 支持文档(http://docs.spring.io/autorepo/docs/spring-roo/1.2.5.RELEASE/reference/html/command-index.html#command -index-finder-commands - JPA 级别的获取语义;无默认值)

但是,我找不到这样的例子来看看我是否走在正确的轨道上或为我的“获取语义”建模——不管是什么。另一种可能性可能是用来field list定义一个包含我的下拉值列表的类。这有一个类似的修饰符 --fetch,但我又找不到任何例子。

在回答我上面的核心问题时,我真的很感激一些帮助。

谢谢!

4

1 回答 1

1

Fetch 参数指示关联是应该延迟加载还是必须急切地获取(https://docs.oracle.com/javaee/6/api/javax/persistence/ManyToOne.html#fetch())。

也许测试的错误可能是因为您尝试使用不存在的相关元素来查找、创建、删除或更新元素。首先检查这个。

您可以在https://github.com/DISID/gvnix-samples/blob/master/quickstart-app/quickstart.roo上看到使用 gvNIX(Spring Roo 的分发)创建的应用程序示例,其中包含一些实体之间的关系

于 2015-09-28T14:44:19.067 回答