我有一个表格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中使用实际列名。
答案 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();