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;
}
}
なぜcreateNativeQueryではないのですか –
mgsmsテーブルからdestとmessageをマップして(dbInfo.hbm.xmlを参照)、このテーブルから 'select sms from MGSMS sms'を選択します。あなたが持っている問題は次のとおりです:1.休止状態を使用するユーザはmgsmsテーブルを見ることができません。そして、それを作成しようとすると、それは存在すると言いますが(あなたは見ることはできませんが)、データベースは作成を妨げます。 3.選択したクエリは、 'select sms。* from ...'のようなものでなければなりません。 – g00dy
MGSMSは、MGSMSビューにマップされるクラス(エンティティ)でなければなりません。このクラスを作成しましたか?はいの場合は、コードを表示します。 –