2017-10-11 9 views
0

私はすでに存在するVIEWにselect文の結果を表示します。しかし、テーブルが見つからず、テーブルを作成しようとすると、以下のエラーが表示され続けます。休止状態のビューでクエリを実行する(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> 

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 iは、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

なぜcreateNativeQueryではないのですか –

+0

mgsmsテーブルからdestとmessageをマップして(dbInfo.hbm.xmlを参照)、このテーブルから 'select sms from MGSMS sms'を選択します。あなたが持っている問題は次のとおりです:1.休止状態を使用するユーザはmgsmsテーブルを見ることができません。そして、それを作成しようとすると、それは存在すると言いますが(あなたは見ることはできませんが)、データベースは作成を妨げます。 3.選択したクエリは、 'select sms。* from ...'のようなものでなければなりません。 – g00dy

+0

MGSMSは、MGSMSビューにマップされるクラス(エンティティ)でなければなりません。このクラスを作成しましたか?はいの場合は、コードを表示します。 –

答えて

0

いたメインのJava classTakersQuery.java列のマッピングを修正して正常に機能しました