2014-06-14 59 views
4

我試圖設置一個JPA的小型工作示例,但是當我運行代碼時,錯誤:執行加載命令時出錯:org.hibernate.exception.SQLGrammarException:無法在線程「主」中提取ResultSet異常

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 

一些建議或幫助一點請

回答

5

的問題是與實體Zamowienie你映射領域adres到一個名爲imie列:

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

我認爲應該是:

@Column(name="adres", length=50) 
private String adres; 
相關問題