我是 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
,但我又找不到任何例子。
在回答我上面的核心问题时,我真的很感激一些帮助。
谢谢!