【问题标题】:Error org.hibernate.InstantiationException: Could not instantiate entity错误 org.hibernate.InstantiationException:无法实例化实体
【发布时间】:2014-10-21 00:37:41
【问题描述】:

我有以下设置:

  • GlassFish 服务器 4.1
  • 休眠 4.3.6.Final
  • JPA 2.0

应用程序通常部署在服务器上,表格已正确创建和填充。当我打开用 JavaServer Faces 编写的 Web 应用程序时会发生错误。

当我尝试获取实体时出现异常

javax.servlet.ServletException:org.hibernate.InstantiationException:无法实例化实体::entity.Test

我在以下代码行 em.find(Test.class, 1L); 中遇到了异常。实际上下一行也不起作用。这是原始代码,但我创建了一个简单的测试用例来显示问题。

package service;

import java.io.Serializable;
import java.util.List;
import java.util.logging.Logger;

import javax.faces.bean.SessionScoped;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import entity.Test;
import entity.WeatherInfo;

@Named
@SessionScoped
public class WeatherInfoEntryBean implements Serializable{

    @PersistenceContext
    EntityManager em;

    /**
     * @return the blogEntry
     */
    public List<WeatherInfo> getEntities() {
        em.find(Test.class, 1L);
        List<WeatherInfo> weatherInfos = em.createQuery("SELECT w FROM WeatherInfo w").getResultList();
        return weatherInfos;
    }
}

测试实体很简单

package entity;

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

@Entity
@Table(name = "test")
public class Test implements Serializable {
    private Long id;
    private String url;

    public Test() {
        super();
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {

        return id;
    }

    @Column(name = "url")
    public String getUrl() {

        return url;
    }

    public void setId(Long id) {

        this.id = id;
    }

    public void setUrl(String url) {

        this.url = url;
    }
}

persistence.xml 文件根据 JPA 文档看起来很正常:

<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="weatherTaskPersistenceUnit" transaction-type="JTA">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <jta-data-source>jdbc/__default</jta-data-source>

        <class>entity.WeatherInfo</class>
        <class>entity.CityInfo</class>
        <class>entity.Api</class>
        <class>entity.Test</class>

        <exclude-unlisted-classes>true</exclude-unlisted-classes>

        <properties>
            <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform"/>
            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
            <property name="javax.persistence.schema-generation.create-source" value="metadata"/>
            <property name="javax.persistence.sql-load-script-source" value="META-INF/data.sql"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
        </properties>
    </persistence-unit>
</persistence>

这个设置应该有效吗?我究竟做错了什么?这里是否缺少任何信息?

【问题讨论】:

    标签: hibernate jsf jpa glassfish


    【解决方案1】:

    我只是猜测问题出在 Test 类的构造函数中的 super() 调用。

    这个调用没有任何意义,因为你只是在扩展Object

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-01
      • 2014-07-27
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      相关资源
      最近更新 更多