Hibernate引起:java.sql.SQLException:ORA-00942:表或视图不存在

时间:2016-05-21 11:24:32

标签: java oracle hibernate

实体:

package Model;
import java.io.Serializable;
import javax.persistence.*;

@Entity
@Table( name="Eredmenyek", schema = "H_C26G18" )
public class Eredmenyek implements Serializable{

@Id @GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ID")
private int id;

@Column( name="JATEKOS1" )
private String Játékos1;

@Column( name="JATEKOS2" )
private String Játékos2;

@Column( name="NYERTES" )
int nyertes;


public Eredmenyek(String Játékos1, String Játékos2, int nyertes) {
    this.Játékos1 = Játékos1;
    this.Játékos2 = Játékos2;
    this.nyertes = nyertes;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getJátékos1() {
    return Játékos1;
}

public void setJátékos1(String Játékos1) {
    this.Játékos1 = Játékos1;
}

public String getJátékos2() {
    return Játékos2;
}

public void setJátékos2(String Játékos2) {
    this.Játékos2 = Játékos2;
}

public int getNyertes() {
    return nyertes;
}

public void setNyertes(int nyertes) {
    this.nyertes = nyertes;
}
}

实体经理:

package Model;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;

public class EredményekImpl {

private static EntityManager manager;
private static EntityManagerFactory factory;

private static void nyit(){
    factory = Persistence.createEntityManagerFactory("db");
    manager = factory.createEntityManager();
}

private static void zár(){
    manager.close();
    factory.close();
}

public void beírEredmény(String játékos1, String játékos2, int nyertes ){
    nyit();

    manager.getTransaction().begin();
    Eredmenyek e = new Eredmenyek(játékos1, játékos2, nyertes);
    manager.persist(e);
    manager.getTransaction().commit();

    zár();
}

public List<Eredmenyek> olvasEredmény(  ){
    nyit();


    System.out.println("Olvas");
    TypedQuery<Eredmenyek> q = manager.createQuery("SELECT e FROM Eredmenyek e", Eredmenyek.class);
    List<Eredmenyek> result = q.getResultList();

    zár();
    return result; 
}

}

的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="db">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>Model.Eredmenyek</class>
<properties>
  <property name="hibernate.connection.url" value="jdbc:oracle:thin:@db.inf.unideb.hu:1521:ora11g"/>
  <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
  <property name="hibernate.default_schema" value="H_C26G18"/>
  <property name="hibernate.connection.username" value="H_C26G18"/>
  <property name="hibernate.connection.password" value="kassai"/>
</properties>
</persistence-unit>
</persistence>

Eredmenyek.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping>
<class name="Model.Eredmenyek" schema="H_C26G18" table="Eredmenyek">
  <id name="id" type="int" column="ID">
     <generator class="increment"/>
  </id>
  <property name="Játékos1" column="JATEKOS1" type="string"/>
  <property name="Játékos2" column="JATEKOS2" type="string"/>
  <property name="nyertes" column="NYERTES" type="int"/>
</class>
</hibernate-mapping>

我只想从数据库中读取(后来写):

@FXML
private void listázás(ActionEvent event) {

    listáz.setText("Megnyomtad");
    EredményekImpl a = new EredményekImpl();
    List<Eredmenyek> e = a.olvasEredmény();
    String h = new String();

    System.out.println(e);
    System.out.println("Hello");

    for( Eredmenyek i : e ){
        if( i.getNyertes() == 1 )
            h += i.getJátékos1() + " " + i.getJátékos2()+ "\n";
        else
            h += i.getJátékos2() + " " + i.getJátékos1() +"\n";
    }

    lista.setText(h);
}

当我喜欢从数据库中读取时:

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1768)
....

Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
... 47 more
Caused by: javax.persistence.PersistenceException:
org.hibernate.exception.SQLGrammarException: could not extract ResultSet at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerIml.java:1692) 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)
at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:492)
at Model.EredményekImpl.olvasEredmény(EredményekImpl.java:46)
at Game.FXMLController_Ranglista.listázás(FXMLController_Ranglista.java:47)
... 57 more
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)
...
... 59 more
Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
...
... 75 more

创建数据库表和列: 架构:H_C26G18 表名:Eredmenyek 列:ID,JATEKOS1,JATEKOS2,NYERTES

我使用netbeans,在Service / Database / OraleThin中 - &gt;我连接到数据库。 (这似乎是正确的,因为我创建了表格)

我只尝试在一张小桌子上读写一些,但我尝试的所有内容总是给我错误。这个错误,我不知道如何解决它。我看到了所有有价值的名字,我想我没有拼错它。

有人能告诉我这是什么问题,为什么? (这个帮助我真的很快:/)

1 个答案:

答案 0 :(得分:0)

在persistence.xml中,我将validate更改为updatet似乎:

<property name="hibernate.hbm2ddl.auto" value="update"/>

我运行我的程序,它创建了我的表。

问题是kordirko写的:我用命令'Eredmenyek'创建了表和列,但是(数据库没有显示这个)数据库就像用大写创建它一样。在此之后,如果我尝试使用大写的'EREDMENYEK'或'Eredmenyek'或其他任何东西,那么没有什么是好的。

在此之后我创建了表格,我将其设置为验证:

<property name="hibernate.hbm2ddl.auto" value="validate"/>