Hibernate:从postgres数据库表检索Java记录时引发奇怪的类型转换异常

Hibernate:从postgres数据库表检索Java记录时引发奇怪的类型转换异常,java,database,hibernate,postgresql,Java,Database,Hibernate,Postgresql,我面临一个奇怪的类型转换错误(编译时错误) 一旦我从旅程表中检索到数据,它就会抛出以下异常,因为它无法识别从列表中获取的对象 我不知道为什么它会这样抱怨,因为对象已经是旅程类型,我用“旅程”类型制作了一个模板列表,每个记录都应该是旅程 "INFO: HHH000397: Using ASTQueryTranslatorFactory Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; canno

我面临一个奇怪的类型转换错误(编译时错误) 一旦我从旅程表中检索到数据,它就会抛出以下异常,因为它无法识别从列表中获取的对象

我不知道为什么它会这样抱怨,因为对象已经是旅程类型,我用“旅程”类型制作了一个模板列表,每个记录都应该是旅程

"INFO: HHH000397: Using ASTQueryTranslatorFactory
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to de.db.journeyTracker.model.journey
"
代码: 下面是对应于上述旅程模型的hibernate配置文件

<?xml version="1.0"?>
<hibernate-mapping>
    <class name="de.db.journeyTracker.model.journey" table="JOURNEY">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="assigned" />
        </id>
        <property name="journeyid" type="java.lang.String">
            <column name="JOURNEYID" />
        </property>
        <property name="linename" type="java.lang.String">
            <column name="LINENAME" />
        </property>
        <property name="operatingday" type="java.util.Date">
            <column name="OPERATINGDAY" />
        </property>
        <property name="realtimearrival" type="java.util.Date">
            <column name="REALTIMEARRIVAL" />
        </property>
        <property name="realtimearrivalstopname" type="java.lang.String">
            <column name="REALTIMEARRIVALSTOPNAME" />
        </property>
        <property name="realtimearrivalstopnumber" type="java.lang.String">
            <column name="REALTIMEARRIVALSTOPNUMBER" />
        </property>
        <property name="realtimedeparture" type="java.util.Date">
            <column name="REALTIMEDEPARTURE" />
        </property>
        <property name="realtimedeparturestopname" type="java.lang.String">
            <column name="REALTIMEDEPARTURESTOPNAME" />
        </property>
        <property name="realtimedeparturestopnumber" type="java.lang.String">
            <column name="REALTIMEDEPARTURESTOPNUMBER" />
        </property>
        <property name="schedulearrival" type="java.util.Date">
            <column name="SCHEDULEARRIVAL" />
        </property>
        <property name="schedulearrivalstopname" type="java.lang.String">
            <column name="SCHEDULEARRIVALSTOPNAME" />
        </property>
        <property name="schedulearrivalstopnumber" type="java.lang.String">
            <column name="SCHEDULEARRIVALSTOPNUMBER" />
        </property>
        <property name="scheduledeparture" type="java.util.Date">
            <column name="SCHEDULEDEPARTURE" />
        </property>
        <property name="scheduledeparturestopname" type="java.lang.String">
            <column name="SCHEDULEDEPARTURESTOPNAME" />
        </property>
        <property name="scheduledeparturestopnumber" type="java.lang.String">
            <column name="SCHEDULEDEPARTURESTOPNUMBER" />
        </property>
        <property name="arrivaldelay" type="int">
            <column name="ARRIVALDELAY" />
        </property>
        <property name="direction" type="java.lang.String">
            <column name="DIRECTION" />
        </property>
        <property name="journeyoperator" type="java.lang.String">
            <column name="JOURNEYOPERATOR" />
        </property>
        <property name="schedulevehicletype" type="java.lang.String">
            <column name="SCHEDULEVEHICLETYPE" />
        </property>
        <property name="vehicleid" type="java.lang.String">
            <column name="VEHICLEID" />
        </property>
        <property name="distancerealtime" type="java.lang.Double">
            <column name="DISTANCEREALTIME" />
        </property>
        <property name="maximumspeedrealtime" type="int">
            <column name="MAXIMUMSPEEDREALTIME" />
        </property>
        <property name="calledatallstops" type="java.lang.Boolean">
            <column name="CALLEDATALLSTOPS" />
        </property>
        <property name="departuredelay" type="int">
            <column name="DEPARTUREDELAY" />
        </property>
        <property name="maximumdelay" type="int">
            <column name="MAXIMUMDELAY" />
        </property>
        <property name="minimumdelay" type="int">
            <column name="MINIMUMDELAY" />
        </property>
        <property name="phonenumber" type="java.lang.String">
            <column name="PHONENUMBER" />
        </property>
        <property name="comment_id" type="int">
            <column name="COMMENT_ID" />
        </property>
        <property name="arrivaldelayprojection" type="java.lang.Boolean">
            <column name="ARRIVALDELAYPROJECTION" />
        </property>
        <property name="departuredelayprojection" type="java.lang.Boolean">
            <column name="DEPARTUREDELAYPROJECTION" />
        </property>
        <property name="maximumdelayprojection" type="java.lang.Boolean">
            <column name="MAXIMUMDELAYPROJECTION" />
        </property>
        <property name="maximumspeedrealtimedataincomplete" type="java.lang.Boolean">
            <column name="MAXIMUMSPEEDREALTIMEDATAINCOMPLETE" />
          </property>
          <property name="minmaxdelaydataincomplete" type="java.lang.Boolean">
              <column name="MINMAXDELAYDATAINCOMPLETE" />
          </property>
          <property name="minimumdelayprojection" type="java.lang.Boolean">
              <column name="MINIMUMDELAYPROJECTION" />
          </property>
          <property name="realtimearrivalprojection" type="java.lang.Boolean">
              <column name="REALTIMEARRIVALPROJECTION" />
          </property>
          <property name="realtimedepartureprojection" type="java.lang.Boolean">
              <column name="REALTIMEDEPARTUREPROJECTION" />
            </property>
         </class>
    </hibernate-mapping>
我尝试了以下代码。。正如你所建议的。。但它还是给出了一个例外

           List<Object[]> allJourney;
        allJourney = query.list();
        int Count = 0;
        for (Object[] Journey : allJourney)                 
        {                           

           String strJourneyId =  ((journey) Journey[0]).getJourneyid().toString();
           String strOperatingDay = ((journey) Journey[0]).getOperatingday().toString();
           String strLineName = ((journey) Journey[0]).getLinename();
           String strSchedualeDeparture = ((journey) Journey[0]).getScheduledeparture().toString();
           String strSchedualeDepartureStopName = ((journey) Journey[0]).getScheduledeparturestopname();


          System.out.println(strJourneyId + " " + strOperatingDay + " " + strLineName + " " + strSchedualeDeparture + " " + strSchedualeDepartureStopName);
        }
列出所有旅程;
allJourney=query.list();
整数计数=0;
对于(对象[]旅程:所有旅程)
{                           
字符串strJourneyId=((旅程)旅程[0]).getJourneyid().toString();
字符串StroOperatingDay=((旅程)旅程[0]).getOperatingday().toString();
字符串strLineName=((旅程)旅程[0]).getLinename();
字符串strSchedualeDeparture=((旅程)旅程[0]).GetScheduleDeviation().toString();
字符串strSchedualedPartureStopName=((旅程)旅程[0])。getScheduledeparturestopname();
System.out.println(strJourneyId+“”+strOperatingDay+“”+strLineName+“”+strSchedualeDeparture+“”+strSchedualeDepartureStopName);
}

在Hibernate中使用HSQL查询 尝试这种类型的查询

1> 字符串qryAllJourney=“来自旅程j”; 这将返回所有行程表记录,无任何类型转换异常

或者-假设类旅程具有适当的构造函数-作为实际的类型安全Java对象: String qryAllTourney=“从旅程中选择新旅程(j.id、j.operatingday、j.linename、j.scheduledeparturestopname)

如果您想了解更多详细信息,请访问此链接


在Hibernate中使用HSQL查询 尝试这种类型的查询

1> 字符串qryAllJourney=“来自旅程j”; 这将返回所有行程表记录,无任何类型转换异常

或者-假设类旅程具有适当的构造函数-作为实际的类型安全Java对象: String qryAllTourney=“从旅程中选择新旅程(j.id、j.operatingday、j.linename、j.scheduledeparturestopname)

如果您想了解更多详细信息,请访问此链接


这应该是一个hsql查询

String qryAllJourney = "SELECT j.id , j.operatingday, j.linename, j.scheduledeparture, j.scheduledeparturestopname FROM journey j";
应该是这样的,

String qryAllJourney = "from Journey";

这应该是一个hsql查询

String qryAllJourney = "SELECT j.id , j.operatingday, j.linename, j.scheduledeparture, j.scheduledeparturestopname FROM journey j";
应该是这样的,

String qryAllJourney = "from Journey";
此查询:

SELECT j.id , j.operatingday, j.linename,  
       j.scheduledeparture, j.scheduledeparturestopname 
FROM journey j
不选择旅程实例列表。相反,它选择对象数组列表。数组元素与选择列表中的值匹配:

   [0] = j.id
   [1] = j.operatingday
   ...
请使用以下内容:

   SELECT j FROM journey j
但如果您想继续使用返回的数组,请选择:

  List<Object[]>  allJourney = query.list(); 
  //do what ever you need to do with result:
  for (Object[] row: allJourney) {
      Integer id = (Integer) row[0];
      Date operatingday = (Date) row[1];
  }
List allJourney=query.List();
//对结果做任何需要做的事情:
对于(对象[]行:所有旅程){
整数id=(整数)行[0];
日期操作日期=(日期)行[1];
}
此查询:

SELECT j.id , j.operatingday, j.linename,  
       j.scheduledeparture, j.scheduledeparturestopname 
FROM journey j
不选择旅程实例列表。相反,它选择对象数组列表。数组元素与选择列表中的值匹配:

   [0] = j.id
   [1] = j.operatingday
   ...
请使用以下内容:

   SELECT j FROM journey j
但如果您想继续使用返回的数组,请选择:

  List<Object[]>  allJourney = query.list(); 
  //do what ever you need to do with result:
  for (Object[] row: allJourney) {
      Integer id = (Integer) row[0];
      Date operatingday = (Date) row[1];
  }
List allJourney=query.List();
//对结果做任何需要做的事情:
对于(对象[]行:所有旅程){
整数id=(整数)行[0];
日期操作日期=(日期)行[1];
}

否,但我不需要所有这些列数据。我的意思是我不想检索每一条记录和所有东西。但是我想检索一些特定的列数据。更重要的是。。旅程表几乎有5K条记录,一旦执行查询,它会在执行1分钟后发出抱怨。比如GC崩溃或超出限制,或者……不知何故,其他的bounnding问题……我不知道您是否不想选择旅程记录,那么就不要指望Joyney会这样做。正如我在回答中所说,结果现在是对象数组。如果您想根据某些条件选择记录,请添加适当的WHERE子句。那么,在正常的psql查询中,您不能从表中选择少数列数据吗?如上面所述,选择j.id、j.schedualedparturetime、j.arrivaltime、j.operatingday我只想检索少数列的数据,而不是所有列的数据。是的,您可以(我假设您使用psql引用HQL),这就是您正在做的,结果是对象[]的列表,其中第一个元素(在您的情况下)是值id,第二个是operatingday的值,依此类推。关于如何从结果中选取值的示例被添加到了答案中。米科莫努:你们能看看编辑吗。。就像现在它在抱怨一样…:-(不,但我不想要所有这些列数据。我的意思是我不想检索每个记录和所有内容。但我想检索一些特定的列数据。更重要的是..旅程表有近5K条记录,一旦执行查询,它会在执行1分钟后发出抱怨。例如GC崩溃或超出限制或…不知何故其他r bounnding问题…我不知道您是否不想选择旅程记录,那么就不要期望Joyney作为结果。正如我在回答中所说的,结果现在是对象数组。如果您想根据某些条件选择记录,请添加适当的WHERE子句。所以,在正常的psql查询中,您不能从表中选择少量列数据吗?就像上面的选择一样T j.id,j.schedualedparturetime,j.arrivaltime,j.operatingday我只想检索少数列的数据,而不是所有列的数据。是的,您可以(我假设您使用psql引用HQL),这就是您正在做的,结果是对象[]的列表,其中第一个元素(在您的情况下)是值id,第二个是operatingday的值,依此类推。关于如何从结果中选择值的示例被添加到了答案中。Mikko Maunnu:你能看看编辑吗..现在它抱怨的是相同的…:-(Pradeep:我不想要所有记录和全部数据。我只想要som