我正在使用hibernate。我写了一个原生的SQL查询。 此查询将在sqlSever命令提示符中执行。
try
{
session=HibernateUtil.getInstance().getSession();
transaction=session.beginTransaction();
SQLQuery query = session.createSQLQuery("SELECT AP.PROJECT_NAME, AP.SKILLSET, PA.START_DATE, PA.END_DATE, RS.EMPLOYEE_ID, RS.EMPLOYEE_NAME, RS.REPORTING_PM FROM RESOURCE_MASTER RS,SHARED_PROPOSAL S, ACTUAL_PROPOSAL AP, PROJECT_APPROVED PA, PROJECT_ALLOCATION PL WHERE RS.EMPLOYEE_ID = PL.EMPLOYEE_ID AND PA.PROJECT_ID = PL.PROJECT_ID AND PA.SHARED_PROPOSAL_ID = S.SHARED_PROPOSAL_ID AND S.ACTUAL_PROPOSAL_ID=AP.ACTUAL_PROPOSAL_ID");
List<Object[]> obj=query.list();
Object[] object=new Object[arrayList.size()];
for (int i = 0; i < arrayList.size(); i++) {
object[i]=arrayList.get(i);
System.out.println(object[i]);
}
arrayList.get(0);
String name=(String)arrayList.get(0);
logger.info("In find All searchDeveloper");
}catch(Exception exception)
{
throw new PPAMException("Contact admin","Problem retrieving resource master list",exception);
}
我收到以下异常: org.hibernate.MappingException:没有JDBC类型的Dialect映射:-9
此查询在SqlServer命令提示符中执行。我绘制了七张桌子。 如果我删除了ACTUAL_PROPOSAL AP表,它会正确执行。
请帮帮我
答案 0 :(得分:2)
当 hibernate dialect无法为db列类型找到相应的java数据类型时,会出现此问题。要解决此问题,您需要使用addScalar()
方法指定每个结果项的数据类型。
例如,
sess.createSQLQuery("SELECT ID,NAME,BIRTHDATE FROM CATS")
.addScalar("ID", Hibernate.LONG)
//If u r using newer version of hibernate use new LongType()
//instead of Hibernate.LONG
.addScalar("NAME", Hibernate.STRING)
.addScalar("BIRTHDATE", Hibernate.DATE)
答案 1 :(得分:0)
就像更新一样。 ManuPK是正确的,但Hibernate.String,Hibernate.Date,Hibernate.Long已被弃用。见http://opensource.atlassian.com/projects/hibernate/browse/HHH-5138