2017-10-11 178 views
0

我想在已存在的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> 

主要的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類,即持久性類

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; 
    } 

} 
+0

爲什麼不創建自定義查詢 –

+0

因此,您可以從mgsms表中映射dest和消息(查看dbInfo.hbm.xml),然後從此表中選擇sms列'select from MGSMS sms'。您遇到的問題是:1. hibernate使用的用戶無法看到mgsms表(另一個模式沒有選擇授予等)。然後,當您嘗試創建它時,它說它存在(即使您看不到它),但數據庫阻止創建。 3.您的選擇查詢必須是我的東西,或者像'select sms。* from ...'或枚舉所有列.. – g00dy

+0

MGSMS應該是一個映射到MGSMS視圖的類(實體)。你是否創建了這個課程?如果是,那麼向我們顯示代碼。 –

回答

0

我有糾正列映射,它的工作