【问题标题】:querying (select statement) on a view in hibernate在休眠中的视图上查询(选择语句)
【发布时间】:2018-03-22 15:03:46
【问题描述】:

我想在已经存在的 VIEW 上显示 select 语句的结果。但我不断收到以下错误,即找不到表并尝试创建表:

22058 [main] INFO org.hibernate.cfg.SettingsFactory  - Default entity-mode: pojo
24051 [main] INFO org.hibernate.tool.hbm2ddl.DatabaseMetadata  - table not found: MGSMS
24675 [main] INFO org.hibernate.tool.hbm2ddl.DatabaseMetadata  - table not found: MGSMS
24675 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate  - create table MGSMS (ID number(10,0) not null, DEST varchar2(255 char), MESSAGE varchar2(255 char), primary key (ID))
25969 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate  - Unsuccessful: create table MGSMS (ID number(10,0) not null, DEST varchar2(255 char), MESSAGE varchar2(255 char), primary key (ID))
25970 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate  - ORA-00955: name is already used by an existing object

我是休眠新手。谁能帮忙。

我有 dbInfo.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC  
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  

 <hibernate-mapping>  
  <class name="com.javaHb.queryDBhb.dbInfo" table="MGSMS" >  
    <id column="ID" name="id" type="int">
      <generator class="increment" />
    </id>

    <property name="dest" type="string" column="DEST" /> 
    <property name="message" type="string" column="MESSAGE" />

  </class>  

 </hibernate-mapping> 

main java classTakersQuery.java

package com.javaHb.queryDBhb;

import java.util.List;

import org.apache.log4j.BasicConfigurator;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class TakersQuery {
    public static void main(String[] args) {

        BasicConfigurator.configure();
        Configuration cfg = new Configuration();
        cfg.configure("hibernate.cfg.xml");

        SessionFactory factory = cfg.buildSessionFactory();
        Session session = factory.openSession();
        Transaction tx = session.beginTransaction();

        //get few fields
        Query query = session.createQuery("select sms from MGSMS sms");
        List<Object[]> rows = query.list();

        for (Object[] row: rows) {
            System.out.println(" ------------------- ");
            System.out.println("dest: " + row[0]);
            System.out.println("message: " + row[1]);
        }
        tx.commit();
        session.close();
        factory.close();
    }
}

DBInfo.java 是 java 类,即 Persistent 类

package com.javaHb.queryDBhb;

import javax.persistence.Column;
import javax.persistence.Entity;  
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;  
import javax.persistence.NamedNativeQuery;
import javax.persistence.Table;  

import org.hibernate.annotations.Immutable;
import org.hibernate.annotations.Loader;

@Entity
@Immutable
public class dbInfo {
    @Id  
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", updatable = false, nullable = false)
    private int id;
    @Column(name="dest")
    private String dest; 
    @Column(name="message")
    private String message;

    public int getid() {  
        return id;  
    }  
    public void setid(int id) {  
        this.id = id;  
    }  
    public String getdest() {  
        return dest;  
    }  
    public void setdest(String dest) {  
        this.dest = dest;  
    }  
    public String getmessage() {  
        return message;  
    }  
    public void setmessage(String message) {  
        this.message = message;  
    }  

}

【问题讨论】:

  • 为什么不创建NativeQuery
  • 因此您从 mgsms 表映射 dest 和 message(查看 dbInfo.hbm.xml),然后从该表 select sms from MGSMS sms 中选择 sms 列。您遇到的问题是: 1. hibernate 使用的用户看不到 mgsms 表(另一个模式没有选择授权等)。然后,当您尝试创建它时,它会说它存在(即使您看不到它),但数据库会阻止创建。 3.您的选择查询必须是select sms.* from ...之类的东西,或者枚举那里的所有列..
  • MGMS 应该是映射到 MGMS 视图的类(实体)。你创建了这个类吗?如果是,则向我们展示代码。
  • @dsp_user 我最后更新了我的问题中的课程
  • 另外,我不在您的实体中发送短信。我看到消息,但它映射到消息列,而不是 sms 列。检查您的字段映射。

标签: java database oracle hibernate hibernate-mapping


【解决方案1】:

我必须更正列映射并且它起作用了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    相关资源
    最近更新 更多