Hibernet / JPA中是否有一种方法可以将动态列映射为类/对象?

时间:2019-09-02 07:40:35

标签: jpa hibernate-mapping

我正在创建一个数据集,该数据集具有一些固定的列,以后可以根据需要添加任意数量的列。而且我在Java中使用了Hibernate Entity Manager,但是找不到做到这一点的方法。

我已经使用本机查询完成了此操作,即直接使用statement.executeQuery(不使用hibernate或JPA)。

表结构: |表:X | | id |名称|地址| dynamic_attribute_1 | dynamic_attribute_2 | dynamic_attribute_X |

首先,我没有从信息模式中添加任何dynamic_columns:

 String queryTable = "SELECT column_name 
 FROM information_schema.columns  
 WHERE table_schema = 'test' AND table_name   = 'x'  
 AND column_name ilike 'ynamic_attribute_%' ";

由于这里的结果是单个列,所以我立即将对象转换为了Sring并添加了额外的列数。

Query query = entityManager.createNativeQuery( queryTable );
List resultList = query.getResultList();
List <String> columns = new ArrayList<>(); 

for (Object result : resultList  ) {
           String a;
           columns.add(a);
       } 

然后我查询了类似的结果:

String colsQuery = "SELECT DISTINCT " + String.join(",",columns) 
 FROM test.x "; 
Query colssQ = entityManager.createNativeQuery(colsQuery); 

此后,我被困住了,因为结果现在将具有多列,而且我不知道如何创建一个类来获取/映射结果集。 我得到的结果仅在对象中。

我正在获得与Object一样的输出,但有我想要的结果,但是我无法映射和使用它,在类中有没有办法像这样:

@Entity
@Table(name="x")
public class X
{
    // @Column(name="x",class="X") 
    List<Parameter> dynamic_attributes = null;
}  

或其他任何方式..

0 个答案:

没有答案