JPA + DB2无法执行简单查询
编辑1: 当Hibernate连接到MS-SQL时,所有列和表都在扫描。 LogsJPA + DB2无法执行简单查询
但是,当Hibernate连接到DB2时,它试图再次制作(渲染)包含''我''字母的所有表和列。 Logs
我扫描我意识到,所有的字母是big.In事实表和列后,每一个字母是在DB2大。 Hibernate使用小写字母进行查询,并且由于DB2的大字母敏感性,它不会实现列名。出于这个原因,它提供了一个报警器是在下面,
WARN SqlExceptionHelper: SQL Error: -99999, SQLState: 42703
15:15:22,025 ERROR SqlExceptionHelper: An undefined column name was detected.
我怎样才能解决这个问题?
我必须使用jpa从db2中的表中检索数据。 当我尝试使用实体管理器执行查询时,我得到的错误不知道问题出在哪里。 我的代码在MS-SQL和HSQL-DB运行...但我连接DB2消息错误:*
-
查询QRY = em.createQuery(“持有H其中h.RDeleted =: ARG1" ); -
13:26:38135 DEBUG SQL:选择holding0_.HoldingId如HoldingId1_,holding0_.RDeleted如RDeleted1_,holding0_.InsertDate如InsertDate1_,holding0_.SavesUserId如SavesUse4_1_,holding0_.UpdateDate如UpdateDate1_,holding0_。更新程序为Updater1_,将0_.Description保存为Descript7_1_,将Holding_0_.HoldingName保存为HoldingN8_1_来自Holding holding0_,其中holding0_.RDeleted =? Hibernate:选择hold0_.HoldingId作为HoldingId1_,保持0_.RDeleted为RDeleted1_,保持0_.InsertDate为InsertDate1_,保持0_.SavesUserId为SavesUse4_1_,保持0_.UpdateDate为UpdateDate1_,保持0_.Updater为Updater1_,保持0_.Description为Descript7_1_,保持0_.HoldingName为HoldingN8_1_ Holding Holding0_ where hold0_.RDeleted =? 13:26:38428 WARN SqlExceptionHelper:SQL错误:-99999,SQLSTATE:42703 13:26:38428 ERROR SqlExceptionHelper:检测到未定义的列名。
但查询工作:
Select h.holdingId, h.holdingName, h.description from Holding h
我的数据源:
<bean class="org.apache.commons.dbcp.BasicDataSource" id="dataSourceDB2_JT400" destroy-method="close">
<property value="com.ibm.as400.access.AS400JDBCDriver" name="driverClassName"/>
<property value="jdbc:as400://192.168.1.1/GULERP" name="url"/>
<property value="user" name="username"/>
<property value="PW" name="password"/>
<property value="5" name="initialSize"/>
</bean>
我的EntityManager:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="erp" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="false" />
<property name="databasePlatform" value="org.hibernate.dialect.DB2400Dialect" />
</bean>
</property>
<property name="dataSource" ref="dataSourceDB2_JT400"/>
</bean>
和我的域:
@Entity
@AccessType("field")
@Table(name = "Holding", uniqueConstraints = {@UniqueConstraint(columnNames={"HoldingName"})})
public class Holding extends BaseClass implements Serializable {
transient static final long serialVersionUID = 5473887143181971744L;
@Id
@Column(name = "HoldingId", nullable = false, length=36)
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
private String holdingId;
@Basic(optional = false)
@Column(name = "HoldingName", nullable = false, length = 100)
private String holdingName;
@Column(name = "Description", length = 210)
private String description;
@OneToMany(mappedBy = "holdingId", fetch = FetchType.LAZY)
private List<Company> companyList;
解决方案:
@Override
@PreAuthorize("hasRole('ROLE_ADMIN')")
public List<HoldingDto> getHoldingList()
{
List<HoldingDto> holdLst = null;
try
{
String aa = (String) q.getSingleResult();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<HoldingDto> q = cb.createQuery(HoldingDto.class);
Root<Holding> h = q.from(Holding.class);
q.select(cb.construct(HoldingDto.class, h.get("holdingId"), h.get("holdingName"), h.get("description"), h.get("savesUserId"), h.get("insertDate"),
h.get("updateDate"), h.get("updater"), h.get("RDeleted")));
holdLst = em.createQuery(q).getResultList();
}
catch(NoResultException e)
{
e.printStackTrace();
}
catch (Exception e)
{
throw new RuntimeException(e);
}
return holdLst;
}
尝试执行查询“from Holding h”。如果它仍然会下降:
ERROR SqlExceptionHelper: An undefined column name was detected.
那么这意味着您将您的列名映射到属性名称错误。
你所提到的,下面的查询工作:
Select h.holdingId, h.holdingName, h.description from Holding h
你可以跟踪列通过添加所有列逐个放入选择引起异常。
如果我将所有列名写入查询,hibernate runnig。但新的错误信息:http://chopapp.com/#lzijtk2d – SaRPaRDa 2012-07-09 13:57:23
java.lang.NumberFormatException:对于输入字符串:“holdingId”... – JMelnik 2012-07-09 15:21:05
NumberFormatException解决。查询qry = em.createQuery(“来自Holding h,其中h.RDeleted =:arg1”,Holding.class); , – SaRPaRDa 2012-07-09 21:08:50
比较在查询中的所有列名在表中的所有列名,并找出哪一个是错误或丢失。 – 2012-07-09 11:38:27
我查过了,列名都是正确的。查询执行,如果我手动写入列名称。并且我在DB2客户端上检查了hibernate查询,查询被执行。 – SaRPaRDa 2012-07-09 11:48:06
向我们展示您执行查询的代码以及实体的完整映射。 – 2012-07-09 11:55:26