Java JPA&x2B;Hibernate:createNativeQuery()和#x2B;getResultList()行为?
我要描述的是一些遗留代码。所以有很多东西我不能触摸/改变 此伪代码在Jboss 4.0.3中运行良好Java JPA&x2B;Hibernate:createNativeQuery()和#x2B;getResultList()行为?,java,hibernate,jpa,jboss,Java,Hibernate,Jpa,Jboss,我要描述的是一些遗留代码。所以有很多东西我不能触摸/改变 此伪代码在Jboss 4.0.3中运行良好 big_messy_sql = "select t1.f1 as somealias, t2.f2 as somehthingelse from obj1 t1, obj2 t2 where crazy_conditions...."; Query query = entityManager.createNativeQuery(big_messy_sql); List<Object
big_messy_sql = "select t1.f1 as somealias, t2.f2 as somehthingelse from obj1 t1, obj2 t2 where crazy_conditions....";
Query query = entityManager.createNativeQuery(big_messy_sql);
List<Object> results = query.getResultList();
for (Object oRow : results) {
Object[] r = (Object[]) oRow;
// Do more crazy stuff
}
然后我得到了一个例外:
12:06:09,031 INFO [BigDecimalType] could not read column value from result set: id; S0022: Invalid column name 'id'.
我相信这是因为这个版本的hibernate试图将结果集分别映射到类obj1和obj2中。这些java类是通过JPA从数据库中正确地检索到此应用程序中的其他位置的(即,我们将所有@Entity、@Table和@Column等应用于类obj1和obj2)。由于id列在这个混乱的查询中被别名为其他内容,ORM失败
我的问题来了:
是否有任何地方可以禁用本机查询的自动映射
我想避免为这只混乱的野兽定义SQL映射的整个过程。不用SQL映射,你可以使用and来实现。在数据源的连接URL中签出添加
获取列\u标签\u FOR\u NAME=true
:
<connection-url>jdbc:sybase:Tds:[hostname]:[port]?GET_COLUMN_LABEL_FOR_NAME=true</connection-url>
jdbc:sybase:Tds:[hostname]:[port]?为\u NAME=true获取\u列\u标签
但是看起来EntityManager没有这个方法“createSQLQuery”。我们如何通过JPA使用它?
<connection-url>jdbc:sybase:Tds:[hostname]:[port]?GET_COLUMN_LABEL_FOR_NAME=true</connection-url>