使用hibernate获取具有实体属性值的物理列值

时间:2014-02-06 12:13:28

标签: java sql hibernate

我有一个表格T,其列定义为通常的。

@Entity
@Table(name="T")
public class T {
@Column(name="test_id")
private Long testId;

}

给定实体属性“testId”,我想得到相应的DB列名(即“test_id”)。怎么可能实现呢?

编辑1: 我想将此列保留在与testId实际的DB列名称(test_id)不同的位置。我使用HQL从DB中获取这些值,它具有键作为实体名称(即testId),我想在DB中使用实际列名。

2 个答案:

答案 0 :(得分:5)

如果我正确理解了您的要求,您希望使用HQL,同时为DB列和实体字段提供一致的名称,如下所示:

SELECT t.test_id FROM Test t 

而不是

SELECT t.testId FROM Test t 

只有一种方法可以做到这一点 - 将字段重命名为test_id。 HQL适用于实体,而不适用于数据库表,因此您必须在查询中使用正确的字段名称。

由于test_id与通常的Java编码约定相矛盾,我建议反对它。

编辑:使用反射获取注释属性值将适用于此大纲:

Field field = MyEntity.class.getDeclaredField("testId");
Column a = field.getAnnotation(Column.class);
String columnName = a.name();

答案 1 :(得分:3)

我会尽力避免这种情况,但如果您确定需要它,请使用:

Configuration configuration = sessionFactory.getConfiguration();
PersistentClass persistentClass = configuration
                .getClassMapping(T.class.getName());
String columnName = ((Column) persistentClass.getProperty("testId")
                .getColumnIterator().next()).getName();

另见Get table column names in Hibernate