【问题标题】:How to write native SQL queries in Hibernate without hardcoding table names and fields?如何在不硬编码表名和字段的情况下在 Hibernate 中编写本机 SQL 查询?
【发布时间】:2010-04-19 22:02:37
【问题描述】:

有时您必须使用原生 SQL 而不是休眠 HQL 编写一些查询。有没有一种很好的方法可以避免对表名和字段进行硬编码并从现有映射中获取这些数据?

例如代替:

String sql = "select user_name from tbl_user where user_id = :id";

类似:

String sql = "select " + Hibernate.getFieldName("user.name") + " from " + Hibernate.getTableName(User.class) + " where " + Hibernate.getFieldName("user.id") + " = :id";

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    有可能获得如下所示的信息,但我不确定我是否会在生产代码中执行此操作,除非我确实需要在编译代码后更改表名。否则,是否真的值得为您的代码付出可读性成本?

    AbstractEntityPersister metadata = 
        (AbstractEntityPersister) sessionFactory.getClassMetadata(User.class);
    String tableName = metadata.getTableName();
    String[] columnNames = metadata.getKeyColumnNames();
    

    【讨论】:

    • 当然可以将这个冗长的 API 封装在一个实用方法中,但是是的,仍然会有些混乱。
    • @meriton 同意你可以将它包装在一个实用方法中,我只是想让 serg555 质疑这种聪明是否有必要。想要在简单的一面上大拇指。
    猜你喜欢
    • 1970-01-01
    • 2020-08-19
    • 2019-05-07
    • 2014-05-07
    • 2010-09-24
    • 1970-01-01
    相关资源
    最近更新 更多