有没有办法使用自定义的任意 SQL 查询在 Jmix 中加载实体?

问题描述 投票:0回答:1

我使用的是 Jmix 1.3.1。

我有一个数据库结构(我无法更改),如下所示:

  • 有一个大表,有几列,我将其称为 T 列。
  • 其中一列(字符串值),我将其称为 L 列,是我唯一感兴趣的一列。它有一些不同的值。

我想构建一个实体选择器,用户可以在其中选择 L 列中的值之一,以便按该列过滤报告。我不希望实体选择器中显示整个表 T,只显示 L 列的不同值。

我最初的尝试是创建一个 @JmixEntity 注释类,其中仅包含我的列 L,并带有 @NamedNativeQuery 注释和 @SqlResultSetMapping 注释,其中包含像

SELECT DISTINCT L FROM T
这样的 SQL 查询,类似于我在 这个答案 中找到的内容。我不知道这是否适用于 Jmix,我只能使用 JPA 找到有关此方法的信息,而不是使用 Jmix。

我目前的尝试是有两个课程:

  • 一个像整个表 T 的任何其他类一样用 @JmixEntity、@Table、@Entity 和 @Store 注释,但唯一的字段是 ID 和列 L。
  • 仅用@JmixEntity注释的一个,仅包含L列,该列也用作@InstanceName和@Id。

然后我为这些类中的第一个调整标准实体浏览器以进行查询

select distinct e.L FROM T e

这两种方法都会导致实体选择器打开,但没有显示数据,并且我陷入了如何调试正在发生的事情的困境。我不确定这些方法中哪一种可能有效,或者是否有另一种方法可以实现我想要的。

java sql spring-boot jpa jmix
1个回答
0
投票

第一种方法应该有效。要调试加载的内容,请在列表视图中创建加载委托,然后您将能够在代码中放置断点:

@Autowired
private DataManager dataManager;

@Install(to = "usersDl", target = Target.DATA_LOADER)
private List<User> usersDlLoadDelegate(final LoadContext<User> loadContext) {
    List<User> users = dataManager.loadList(loadContext);
    return users;
}
© www.soinside.com 2019 - 2024. All rights reserved.