Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA&x2B;Hibernate:createNativeQuery()和#x2B;getResultList()行为?_Java_Hibernate_Jpa_Jboss - Fatal编程技术网

Java JPA&x2B;Hibernate:createNativeQuery()和#x2B;getResultList()行为?

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

我要描述的是一些遗留代码。所以有很多东西我不能触摸/改变

此伪代码在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> 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>