【问题标题】:playframework .getResultList(); returns [Ljava.lang.Object;@4c1d12b6]播放框架 .getResultList();返回 [Ljava.lang.Object;@4c1d12b6]
【发布时间】:2013-12-12 13:49:54
【问题描述】:

我从数据库中的 h2 中选择条目的方法

@Transactional(readOnly=true)
public static Result view() {
    List<MedicalIncidents> data = JPA.em()
           .createNativeQuery("SELECT * FROM MedicalIncident")
           //.createQuery("Select m from MedicalIncident m")
           .getResultList();
    System.out.println(data);

我认为它有效,因为我在数据库中的该表中有 2 个条目:

但是 System.out.println(data) 在游戏控制台中返回:

[[Ljava.lang.Object;@70a0c9be, [Ljava.lang.Object;@4c1d12b6]

但它应该按模型名称返回此对象,例如:computer-database-jpa:

[models.Computer@214c6fde, models.Computer@63728eb3, models.Computer@75f6bcc6, models.Computer@19e3a7ab, models.Computer@3114d8d4, models.Computer@4fa75f78, models.Computer@756ce822, models.Computer@40fc4c68, models.Computer@73fc612c, models.Computer@3e4fcb31]

所以我认为它有问题。请帮忙

如何使用这些对象将它们与模型类绑定,例如: 计算机数据库-jpa http://www.playframework.com/documentation/2.2.x/Samples

此代码的堆栈跟踪:

List<MedicalIncidents> data = JPA.em().createNativeQuery("SELECT * FROM MedicalIncident", MedicalIncident.class)
                                              .getResultList();
        System.out.println(data);

堆栈跟踪

[info] play - Application started (Dev)
[error] o.h.e.j.s.SqlExceptionHelper - Kolumna "_ebean_intercept" nie istnieje
Column "_ebean_intercept" not found [42122-172]
[error] play - Cannot invoke the action, eventually got an error: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
[error] application - 

! @6ghb6iadj - Internal server error, for (GET) [/incydent_medyczny/podglad] ->

play.api.Application$$anon$1: Execution exception[[PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query]]
        at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10.jar:2.2.1]
        at play.api.DefaultApplication.handleError(Application.scala:399) [play_2.10.jar:2.2.1]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1]
        at scala.Option.map(Option.scala:145) [scala-library.jar:na]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2.applyOrElse(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1]
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387) ~[hibernate-entitymanager-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310) ~[hibernate-entitymanager-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:277) ~[hibernate-entitymanager-4.2.6.Final.jar:4.2.6.Final]
        at controllers.MedicalIncidents.view(MedicalIncidents.java:68) ~[na:na]
        at Routes$$anonfun$routes$1$$anonfun$applyOrElse$3$$anonfun$apply$3.apply(routes_routing.scala:81) ~[na:na]
        at Routes$$anonfun$routes$1$$anonfun$applyOrElse$3$$anonfun$apply$3.apply(routes_routing.scala:81) ~[na:na]
Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
        at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123) ~[hibernate-core-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) ~[hibernate-core-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) ~[hibernate-core-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.loader.Loader.doList(Loader.java:2529) ~[hibernate-core-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.loader.Loader.doList(Loader.java:2512) ~[hibernate-core-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2342) ~[hibernate-core-4.2.6.Final.jar:4.2.6.Final]
Caused by: org.h2.jdbc.JdbcSQLException: Kolumna "_ebean_intercept" nie istnieje
Column "_ebean_intercept" not found [42122-172]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) ~[h2.jar:1.3.172]
        at org.h2.message.DbException.get(DbException.java:169) ~[h2.jar:1.3.172]
        at org.h2.message.DbException.get(DbException.java:146) ~[h2.jar:1.3.172]
        at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3047) ~[h2.jar:1.3.172]
        at org.h2.jdbc.JdbcResultSet.get(JdbcResultSet.java:3133) ~[h2.jar:1.3.172]
        at org.h2.jdbc.JdbcResultSet.getBytes(JdbcResultSet.java:1042) ~[h2.jar:1.3.172]

models.MedicalIncydent.class

package models;

import java.util.*;
import javax.persistence.*;
import javax.persistence.Entity;
import javax.validation.*;

import play.data.validation.Constraints;
import play.data.validation.Constraints.*;
import play.api.db.*;
import play.db.jpa.*;
import javax.persistence.EntityManager;

@Entity
public class MedicalIncident   {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public int id;

    @Constraints.Required
    public String month;

    @Constraints.Required
    public String place;

    @Constraints.Required
    public String unit;

    @Constraints.Required
    public String incident_type;

    @Constraints.Required
    public int age;



    /**
     * Insert this new incident submission.
     */
    public void toDataBase() {
        // persist object - add to entity manager
        JPA.em().merge(this);
        JPA.em().persist(this);
    }

}

【问题讨论】:

  • 您是否尝试过以下查询:JPA.em() .createNativeQuery("SELECT * FROM MedicalIncident", MedicalIncident.class)
  • 不幸的是没有帮助。出现错误:[PersistenceException:org.hibernate.exception.SQLGrammarException:无法执行查询]。在上面添加了堆栈跟踪
  • 是的。我已将该类添加到上面的帖子中
  • 不,我没试过。我使用 jdbc jpa hibernate 而不是 ebean。如果我了解你。
  • 可能您没有正确通知 Play 框架您使用的是 Hibernate 而不是默认的 EBean,因为如果我正确读取异常堆栈跟踪,它似乎仍然在做 EBean 的事情。 '未找到列“_ebean_intercept”'。但也许这是设计使然。

标签: java hibernate jpa playframework-2.2


【解决方案1】:

在 build.sbt 中 libraryDependencies ++= Seq(
javaJdbc,
javaJpa,
缓存,
javaWs,
"org.hibernate" % "hibernate-entitymanager" % "4.3.9.Final")

重新启动激活器后,请确保键入“clean”命令

public class Application extends Controller {

    @Transactional
    public static Result index() {

        Query query = JPA.em().createNativeQuery("select * from fetched_results limit 10", FetchedResults.class);
        List<FetchedResults> lst = query.getResultList();
        System.out.println(lst.get(0).name);

        return ok(test.render("Your new application is ready."));
    }

}

https://github.com/jamesward/play-java-jpa

【讨论】:

    猜你喜欢
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多