【问题标题】:How to resolve Hibernate Table or view does not exist?如何解决休眠表或视图不存在?
【发布时间】:2015-08-24 06:58:25
【问题描述】:

我可以使用 createSQLQuery 查看 R_States 表中的结果列表。

  public List<String> getStates() throws Exception {    
    try 
    {
    Session session = sessionFactory.openSession();
    return session.createSQLQuery("select * from R_States").list();
    }
    catch(Exception e)
    {
     //Logging
    }
    finally
    {
        if(session !=null && session.isOpen())
        {
          session.close();
          session=null;
        }
    }
    return null;
}

但是当我尝试使用 HQL createQuery 方法时,我得到一个 ORA-00942: table or view does not exist 错误。

   return session.createQuery("from States").list();

这是我的会话工厂(JNDI 数据源)。

<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

<property name="packagesToScan">
<list>
       <value>folder.dao</value>
       <value>folder.domain.States</value>
   </list>

</property>


<property name="hibernateProperties">
    <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</prop>
        <prop key="hibernate.show_sql">true</prop>
        <prop key="hibernate.hbm2ddl.auto">update</prop>
        <prop key="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</prop>
        <prop key="hibernate.connection.datasource">java:/comp/env/jdbc/r</prop>
        <prop key="hibernate.current_session_context_class">thread</prop>

        </props>
        </property>  
    </bean>

这是我的域类。我错过了什么?

@Entity 
@Table(name = "R_STATE")  
public class States {  


 @Column(name = "SCode")  
 private String stateCode;   


@Column(name = "SName")  
 private String stateName;  

 public String getStateCode() {
        return stateCode;
    }

    public void setStateCode(String stateCode) {
        this.stateCode = stateCode;
    }

    public String getStateName() {
        return stateName;
    }

    public void setStateName(String stateName) {
        this.stateName = stateName;
    }

【问题讨论】:

    标签: hibernate spring-mvc hibernate-mapping


    【解决方案1】:
       <value>folder.domain.States</value>
    

    这是一个类,而不是一个包,因此 Hibernate 可能找不到您的映射实体。尝试更改:

       <value>folder.domain</value>
    

    【讨论】:

    • 谢谢托布。做到了!
    【解决方案2】:

    遇到了同样的问题。仅从我自己的经验来说,问题在于我没有将查询视为针对 Oracle 的本机 SQL 查询(在我的例子中是后端)。我还必须确保指定架构。该查询一旦编写为引用实际的字段名和表名(带有模式),最终运行良好。示例:

    String sql = "Select fieldname as alias from myschema.mytablename where fieldname = 'somevalue'"; // This is all raw SQL, not Hibernate SQL
    List<Double> dblList = null; // In my case, 'fieldname' is a NUMBER col type, so Hibernate returns a Double.  If it were a VARCHAR, it'd be a String.
    try {
      dblList = session.createSQLQuery(sql).addScalar("alias", StandardBasicTypes.DOUBLE ).list(); // org.hibernate.session, org.hibernate.type.StandardBasicTypes
       } catch (Exception e) {
        e.printStackTrace();
      }
    
      int valuetoworkwith = 0;
      if(dblList != null && dblList.size() > 0) {
        valuetoworkwith = (dblList.get(0)).intValue();
      } else
      {
        // ... If desired, something to alert the user that no value was returned so the default of '0' is being used, or throw an exception, or do nothing in particular.
      }
    

    另见:https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/querysql.html#querysql-creating

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 2013-04-10
      相关资源
      最近更新 更多