如何在没有硬编码表名和字段的情况下在Hibernate中编写本机SQL查询?

时间:2010-04-19 22:02:37

标签: java hibernate

有时您必须在本机SQL中编写一些查询而不是hibernate 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";

1 个答案:

答案 0 :(得分:4)

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

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