2017-10-11 32 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

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