Impossible d’extraire ResultSet en veille prolongée

J’ai un problème avec Hibernate . J’essaie d’parsingr à la liste, mais il jette une exception: HTTP Status 500 - could not extract ResultSet . Lorsque je débogue, il query.list() à la ligne query.list() ..

Mon exemple de code ici

 @Entity @Table(name = "catalog") public class Catalog implements Serializable { @Id @Column(name="ID_CATALOG") @GeneratedValue private Integer idCatalog; @Column(name="Catalog_Name") private Ssortingng catalogName; @OneToMany(mappedBy="catalog", fetch = FetchType.LAZY) private Set products = new HashSet(0); //getter & setter & constructor //... } @Entity @Table(name = "product") public class Product implements Serializable { @Id @Column(name="id_product") @GeneratedValue private Integer idProduct; @ManyToOne @JoinColumn(name="ID_CATALOG") private Catalog catalog; @Column(name="product_name") private Ssortingng productName; @Column(name="date") private Date date; @Column(name="author") private Ssortingng author; @Column(name="price") private Integer price; @Column(name="linkimage") private Ssortingng linkimage; //getter & setter & constructor } @Repository @SuppressWarnings({"unchecked", "rawtypes"}) public class ProductDAOImpl implements ProductDAO { @Autowired private SessionFactory sessionFactory; public List searchProductByCatalog(Ssortingng catalogid, Ssortingng keyword) { Ssortingng sql = "select p from Product p where 1 = 1"; Session session = sessionFactory.getCurrentSession(); if (keyword.sortingm().equals("") == false) { sql += " and p.productName like '%" + keyword + "%'"; } if (catalogid.sortingm().equals("-1") == false && catalogid.sortingm().equals("") == false) { sql += " and p.catalog.idCatalog = " + Integer.parseInt(catalogid); } Query query = session.createQuery(sql); List listProduct = query.list(); return listProduct; } } 

Mes haricots

                 com.shopmvc.pojo     hibernate.dialect=org.hibernate.dialect.MySQLDialect          

Exception:

 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) root cause org.hibernate.exception.SQLGrammarException: could not extract ResultSet org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82) org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:61) org.hibernate.loader.Loader.getResultSet(Loader.java:2036) root cause com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'product0_.ID_CATALOG' in 'field list' sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) java.lang.reflect.Constructor.newInstance(Unknown Source) com.mysql.jdbc.Util.handleNewInstance(Util.java:411) com.mysql.jdbc.Util.getInstance(Util.java:386) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119) com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2815) com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155) com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2322) org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:56) org.hibernate.loader.Loader.getResultSet(Loader.java:2036) org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1836) org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1815) org.hibernate.loader.Loader.doQuery(Loader.java:899) org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341) org.hibernate.loader.Loader.doList(Loader.java:2522) org.hibernate.loader.Loader.doList(Loader.java:2508) org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2338) org.hibernate.loader.Loader.list(Loader.java:2333) org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:490) 

Ma firebase database:

 CREATE TABLE `catalog` ( `ID_CATALOG` int(11) NOT NULL AUTO_INCREMENT, `Catalog_Name` varchar(45) DEFAULT NULL, PRIMARY KEY (`ID_CATALOG`) ) CREATE TABLE `product` ( `id_product` int(11) NOT NULL AUTO_INCREMENT, `product_name` varchar(45) DEFAULT NULL, `date` date DEFAULT NULL, `author` varchar(45) DEFAULT NULL, `price` int(11) DEFAULT NULL, `catalog_id` int(11) DEFAULT NULL, `linkimage` varchar(45) DEFAULT NULL, PRIMARY KEY (`id_product`), KEY `FK_Product_idx` (`catalog_id`), CONSTRAINT `FK_Product` FOREIGN KEY (`catalog_id`) REFERENCES `catalog` (`ID_CATALOG`) ON DELETE NO ACTION ON UPDATE NO ACTION ) 

L’annotation @JoinColumn spécifie le nom de la colonne utilisée comme clé étrangère sur l’entité ciblée.

Dans la classe de Product ci-dessus, le nom de la colonne de jointure est défini sur ID_CATALOG .

 @ManyToOne @JoinColumn(name="ID_CATALOG") private Catalog catalog; 

Toutefois, la clé étrangère de la table Product s’appelle catalog_id

 `catalog_id` int(11) DEFAULT NULL, 

Vous devrez changer le nom de la colonne sur la table ou le nom que vous utilisez dans @JoinColumn pour qu’ils correspondent. Voir http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#entity-mapping-association

Une autre cause potentielle pour d’autres personnes rencontrant le même message d’erreur est que cette erreur se produira si vous accédez à une table dans un schéma différent de celui avec lequel vous vous êtes authentifié.

Dans ce cas, vous devez append le nom du schéma à votre entrée d’entité:

 @Table(name= "catalog", schema = "targetSchemaName") 

Essayez d’utiliser la jointure interne dans votre requête

  Query query=session.createQuery("from Product as p INNER JOIN p.catalog as c WHERE c.idCatalog= :id and p.productName like :XXX"); query.setParameter("id", 7); query.setParameter("xxx", "%"+abc+"%"); List list = query.list(); 

également dans le fichier de configuration hibernate ont

  true 

Pour afficher ce qui est interrogé sur la console.

J’ai eu un problème similaire. Essayez d’utiliser l’éditeur HQL. Il vous affichera le SQL (car vous avez une exception de grammaire SQL). Copiez votre SQL et exécutez-le séparément. Dans mon cas, le problème était dans la définition du schéma. J’ai défini le schéma, mais je devrais le laisser vide. Cela a soulevé la même exception que vous avez eu. Et la description de l’erreur reflétait l’état actuel, car le nom du schéma était inclus dans l’instruction SQL.

Si vous n’avez pas de séquence ‘HIBERNATE_SEQUENCE’ créée dans la firebase database (si vous utilisez oracle ou une firebase database basée sur des séquences), vous obtiendrez le même type d’erreur.

Assurez-vous que la séquence est présente là-bas;