执行load命令时出错:org.hibernate.exception.SQLGrammarException:无法在线程" main"中提取ResultSet异常。

时间:2014-06-14 18:14:23

标签: java hibernate jpa

我正在尝试设置一个小型的JPA样本,但是当我运行代码时,我得到了以下错误:

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import encje.Klient;
import encje.Zamowienie;


public class SzkolenieJPA {

public static void main(String[] args) {

    EntityManagerFactory fabryka =  Persistence.createEntityManagerFactory("jpaHibernateTest");
    EntityManager menadzer = fabryka.createEntityManager();
    Klient przykladowy = menadzer.find(Klient.class, 1);
    for(Zamowienie z : przykladowy.getZamowienia())
        System.out.println(z.getAdres() + " "+ z.getData() + " "+ przykladowy.getNazwisko());
    menadzer.close();

}

}

package encje;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.persistence.*; 

@Entity 
@Table(name="klient")
public class Klient {
 @Id  
 @GeneratedValue(strategy=GenerationType.AUTO)  
 private int id;  
 @Column(name="imie", length=50, nullable=false)  
 private String imie;  
 @Column(name="nazwisko", length=50, nullable=false)  
 private String nazwisko;  
 @OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL, mappedBy="klient")  
 private Set<Zamowienie> zamowienia;

public Klient(){

}

public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getImie() { 
    return imie;
}
public void setImie(String imie) {
    this.imie = imie;
}
public String getNazwisko() {
    return nazwisko;
}
public void setNazwisko(String nazwisko) {
    this.nazwisko = nazwisko;
}
public Set<Zamowienie> getZamowienia() {
    return zamowienia;
}
public void setZamowienia(Set<Zamowienie> zamowienia) {
    this.zamowienia = zamowienia;
}


}

 package encje;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.*;
import javax.persistence.Table;

@Entity
@Table(name="zamowienie")
public class Zamowienie {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column(name="data")
@Temporal(TemporalType.DATE)
private Date data;
@Column(name="imie", length=50)
private String adres;
@ManyToOne
@JoinColumn(name="klient", nullable=false)
private Klient klient;

public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public Date getData() {
    return data;
}
public void setData(Date data) {
    this.data = data;
}
public String getAdres() {
    return adres;
}
public void setAdres(String adres) {
    this.adres = adres;
}
public Klient getKlient() {
    return klient;
}
public void setKlient(Klient klient) {
    this.klient = klient;
}
}

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="jpaHibernateTest" transaction-type="RESOURCE_LOCAL">     
    <provider>org.hibernate.ejb.HibernatePersistence</provider>      
    <properties>       
        <property name="hibernate.connection.username" value="root" />
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />        
        <property name="hibernate.connection.password" value="" />        
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost/szkolenie" />        
        <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />  
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>      
    </properties>   
</persistence-unit> 

   CREATE TABLE IF NOT EXISTS `klient` (
   `id` int(10) NOT NULL AUTO_INCREMENT,
   `imie` varchar(50) COLLATE utf8_polish_ci NOT NULL,
   `nazwisko` varchar(50) COLLATE utf8_polish_ci NOT NULL,
   PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=4 ;



    INSERT INTO `klient` (`id`, `imie`, `nazwisko`) VALUES
    (1, 'janek', 'kowalski'),
    (2, 'marian', 'nowak'),
    (3, 'andrzej', 'nowak');


    CREATE TABLE IF NOT EXISTS `zamowienie` (
   `id` int(10) NOT NULL AUTO_INCREMENT,
   `data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   `adres` text NOT NULL,
   `klient` int(11) DEFAULT NULL,
    PRIMARY KEY (`id`),
   KEY `klient_zamowienie` (`klient`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;



    INSERT INTO `zamowienie` (`id`, `data`, `adres`, `klient`) VALUES
    (1, '2014-06-13 14:45:54', 'Adres', 1),
    (2, '2014-06-14 11:58:43', 'zamowienie mariana nowaka', 2),
    (3, '2014-06-02 08:31:22', 'zamowienie andrzeja nowaka', 3),
    (4, '2014-06-14 11:59:11', 'zamowienie andrzeja nowaka nr 2', 3);

我的错误:

    juin 14, 2014 7:51:22 PM org.hibernate.ejb.HibernatePersistence logDeprecation
    WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider      [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider]      instead.
    juin 14, 2014 7:51:22 PM org.hibernate.ejb.HibernatePersistence logDeprecation
    WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider     [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider]     instead.
    juin 14, 2014 7:51:22 PM org.hibernate.ejb.HibernatePersistence logDeprecation
    WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider     [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider]     instead.
    juin 14, 2014 7:51:22 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
    INFO: HHH000204: Processing PersistenceUnitInfo [
    name: jpaHibernateTest
    ...]
    juin 14, 2014 7:51:22 PM org.hibernate.Version logVersion
    INFO: HHH000412: Hibernate Core {4.3.5.Final}
    juin 14, 2014 7:51:22 PM org.hibernate.cfg.Environment <clinit>
    INFO: HHH000206: hibernate.properties not found
    juin 14, 2014 7:51:22 PM org.hibernate.cfg.Environment buildBytecodeProvider
    INFO: HHH000021: Bytecode provider name : javassist
    juin 14, 2014 7:51:22 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager     <clinit>
    INFO: HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
    juin 14, 2014 7:51:22 PM     org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
    WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!)
    juin 14, 2014 7:51:22 PM     org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
    INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost/szkolenie]
    juin 14, 2014 7:51:22 PM     org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000046: Connection properties: {user=root, password=****}
    juin 14, 2014 7:51:22 PM     org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
    INFO: HHH000006: Autocommit mode: false
    juin 14, 2014 7:51:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
    INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
    juin 14, 2014 7:51:23 PM org.hibernate.dialect.Dialect <init>
    INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
    juin 14, 2014 7:51:23 PM org.hibernate.engine.jdbc.internal.LobCreatorBuilder     useContextualLobCreation
    INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less     than 4
    juin 14, 2014 7:51:23 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
    INFO: HHH000397: Using ASTQueryTranslatorFactory
    juin 14, 2014 7:51:23 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    WARN: SQL Error: 1054, SQLState: 42S22
    juin 14, 2014 7:51:23 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    ERROR: Unknown column 'zamowienia1_.imie' in 'field list'
    juin 14, 2014 7:51:23 PM org.hibernate.event.internal.DefaultLoadEventListener onLoad
    INFO: HHH000327: Error performing load command : org.hibernate.exception.SQLGrammarException:         could not extract ResultSet
    Exception in thread "main" javax.persistence.PersistenceException:     org.hibernate.exception.SQLGrammarException: could not extract ResultSet
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)
        at     org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1694)
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1141)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1068)
    at SzkolenieJPA.main(SzkolenieJPA.java:15)
    Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:89)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.getResultSet(AbstractLoadPlanBasedLoader.java:449)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeQueryStatement(AbstractLoadPlanBasedLoader.java:202)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:137)
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:102)
    at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:186)
    at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4126)
    at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:502)
    at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:467)
    at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:212)
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:274)
    at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:150)
    at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1070)
    at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:176)
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2551)
    at org.hibernate.internal.SessionImpl.get(SessionImpl.java:955)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1110)
    ... 2 more
    Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column     'zamowienia1_.imie' in 'field list'
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1467)
    at     org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:80)
    ... 18 more

一些建议或一些帮助请

1 个答案:

答案 0 :(得分:6)

问题在于您将字段Zamowienie映射到名为adres的列的实体imie

@Column(name="imie", length=50)
private String adres;

我认为应该是:

@Column(name="adres", length=50)
private String adres;