当前位置: 首页 > 知识库问答 >
问题:

分离表中按列划分的Hibernate顺序

师承弼
2023-03-14

我有4张桌子。对于这个问题,我将它们命名为tableA、tableB、tableC、tableD。

TableB看起来像这样:id、name、tag、some_other_parameters

tableC看起来是这样的:id、代码、一些其他参数

表格列:id、tableA_id、tableB_id、tableC_id、entityVersion

tableD中的列没有在实体中定义一对多、多对一关联。这是无法改变的。为什么不重要,但这是无法改变的。@aid“tlong column”的定义类似于tableu;

表B和表C的列定义看起来相同。

表格中的行在插入时如下所示:

表A不为空,表B不为空,表C为空

或者:

tableA不为空,tableB为空,tableC不为空

我想按照这个顺序从tableD中获取列表:tableB行按标签| |“”| |名称asc排序(不同行的标签可以相同,名称是唯一的),然后tableC行按代码asc排序

有可能在标准中做到这一点吗?

现在,我从视图中为tableD和list创建了视图。当我在tableD中更新或插入行时,我使用entity for table。所以我有两个实体:视图(有列display_name,我按此列排序)和表(用于插入和更新)。但这个解决方案对我来说并不完美。我更喜欢使用标准。

我需要这样的标准:

select * from 
TABLE_D tab_d
where TABLE_A_ID = 1 --example id
order by TABLE_B_ID,
case when TABLE_B_ID is not null then
(select code from TABLE_B where id = tab_d.TABLE_B_ID) 
else
(select label || ' ' || name from TABLE_C where id = tab_d.TABLE_C_ID)
end

另一个以我需要的方式返回排序数据的sql:

select tab_d.* from
table_d tab_d
left join table_b tab_b on tab_b.id = tab_d.t_groups_id
left join table_c tab_c on tab_c.id = tab_d.t_users_id
where table_a_id = 10485
order by tab_d.t_groups_id, tab_b.code, tab_c.name || ' ' || tab_c.surname

可以为第一个或第二个sql语句创建条件吗?

共有1个答案

罗祺
2023-03-14

你可以扩展组织。冬眠标准订购并提供自己的实现,该实现为订单生成SQL。参见代码示例

public class OrderBySqlFormula extends Order {
    private String sqlFormula;

    /**
     * Constructor for Order.
     * @param sqlFormula an SQL formula that will be appended to the resulting SQL query
     */
    protected OrderBySqlFormula(String sqlFormula) {
        super(sqlFormula, true);
        this.sqlFormula = sqlFormula;
    }

    public String toString() {
        return sqlFormula;
    }

    public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
        return sqlFormula;
    }

    /**
     * Custom order
     *
     * @param sqlFormula an SQL formula that will be appended to the resulting SQL query
     * @return Order
     */
    public static Order sqlFormula(String sqlFormula) {
        return new OrderBySqlFormula(sqlFormula);
    }
}

然后用你的命令

criteria.addOrder(OrderBySqlFormula.sqlFormula("(a + b) desc"));
 类似资料:
  • 问题内容: 假设我有一个这样的列表: 我如何最优雅地将其分组以在Python中获得此列表输出: 因此,这些值按次值分组,但顺序保留下来。 问题答案:

  • 问题内容: 对于此表: 我需要将具有相同顺序的组相加,以产生此结果。 如何在SQL Server中做到这一点? 注意:该列中的值是连续的。 问题答案: 根据我在您的问题中添加的标签,这是一个空白和孤岛的问题。 效果最好的解决方案可能是 如果值不能保证如所述连续,那么您将需要使用 而是在CTE定义中。 SQL小提琴

  • 我有UCI数据仓库中的胸部手术数据集 此数据集中的一行如下所示: 我有一个脚本可以将这些行读入子列表: 每个子列表都是文件中的一行,包含一些数据转换(大多数情况下,只是将行中的每个元素转换为一些数值;这部分与问题无关) 因此,每个子列表如下所示: 现在,我想做的是将这个子列表转换为两个子列表,其中: 第一个列表的th子列表包含所有元素,但原始列表的th子列表的最后一个元素除外 第二个列表的第一个子

  • 1.配置介绍 GroupDataSource支持6种数据库连接池:c3p0、tomcat-jdbc、druid、dbcp、dbcp2、hikaricp,可以根据poolType属性指定使用哪一种数据库连接池。由于不同的连接池可以配置的属性是不同的,意味着,当选择了不同的poolType后,我们可以配置的属性是不一样的。zebra将这些属性分为3类: 1.通用参数:不管poolType属性值是什么

  • 问题内容: 我有一些这样的数据: 我想查询它看起来像这样: …这样我就可以按数字连续的方式按GROUP BY分组。 另外,循环/游标也是不可能的,因为我正在处理大量数据,谢谢。 问题答案:

  • 问题内容: 我想在df列中获取特定值的百分比。假设我有一个(fol,col2,col3,性别)的df性别列,其值是M或F。我想获取df中M和F值的百分比。 我已经尝试过了,这给了我M和F实例的数量,但是我想要这些作为df中值总数的百分比。 有人可以帮忙吗? 问题答案: 使用有: