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

ins*_*ect 3 java sql hibernate

我有一个表T,其中列通常定义.

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

}
Run Code Online (Sandbox Code Playgroud)

给定实体属性"testId",我想获得相应的DB列名称(即"test_id").怎么可能实现?

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

kos*_*tja 5

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

SELECT t.test_id FROM Test t 
Run Code Online (Sandbox Code Playgroud)

代替

SELECT t.testId FROM Test t 
Run Code Online (Sandbox Code Playgroud)

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

由于test_id与通常的Java编码约定相矛盾,我建议不要这样做.

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

Field field = MyEntity.class.getDeclaredField("testId");
Column a = field.getAnnotation(Column.class);
String columnName = a.name();
Run Code Online (Sandbox Code Playgroud)