此类未定义公共默认构造函数,或构造函数引发异常。内部异常:java.lang.InstantiationException

Posted

技术标签:

【中文标题】此类未定义公共默认构造函数,或构造函数引发异常。内部异常:java.lang.InstantiationException【英文标题】:This class does not define a public default constructor, or the constructor raised an exception. Internal Exception: java.lang.InstantiationException 【发布时间】:2013-01-28 12:45:33 【问题描述】:

大家好,我的 JPA 项目有问题。 Fichier.java 端 Application.java 实现接口“FileSystemElement.java” 这些是我的课 应用程序.java

package com.bfi.webtop.model;



import java.io.Serializable;
import java.util.*;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;

/** @pdOid d477195f-149e-4336-8586-19d6a09ee2d4 */
@Entity
@Table(name="application_")
public abstract class Application implements FileSystemElement, Serializable 
//  public Application() 
//      super();
//  



  public Application(int id_app, String url) 
super();
this.id_app = id_app;
this.url = url;
  



      public Application() 
  super();
  // TODO Auto-generated constructor stub
   



  private int id_app;

  private java.lang.String url;

  /**
  * @return the url
  */
  public java.lang.String getUrl() 
return url;
   

         /**
  * @param url the url to set
     */
      public void setUrl(java.lang.String url) 
          this.url = url;
    

    /**
      * @return the id_app
   */
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
public int getId_app() 
return id_app;


/**
 * @param id_app the id_app to set
 */
public void setId_app(int id_app) 
this.id_app = id_app;



Fichier.java

package com.bfi.webtop.model;

/***********************************************************************
 * Module:  Fichier.java
 * Author:  Marwa
 * Purpose: Defines the Class Fichier
 ***********************************************************************/

import java.util.*;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;


@Entity
public abstract class Fichier implements FileSystemElement 
 private int id_fichier;

   private java.lang.String extension;
   private java.lang.Boolean supprim;
/**
 * @return the extension
 */
public java.lang.String getExtension() 
return extension;

/**
 * @param extension the extension to set
 */
 public void setExtension(java.lang.String extension) 
this.extension = extension;

/**
 * @return the supprim
 */
public java.lang.Boolean getSupprim() 
return supprim;

/**
 * @param supprim the supprim to set
 */
public void setSupprim(java.lang.Boolean supprim) 
this.supprim = supprim;

/**
* @return the id_fichier
*/
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int getId_fichier() 
return id_fichier;

/**
 * @param id_fichier the id_fichier to set
*/
 public void setId_fichier(int id_fichier) 
this.id_fichier = id_fichier;


public Fichier() 
super();



FileSystemElement.java

package com.bfi.webtop.model;

import javax.annotation.Generated;
import javax.persistence.metamodel.StaticMetamodel;

@Generated(value="Dali", date="2013-01-28T10:33:26.416+0100")
@StaticMetamodel(FileSystemElement.class)
public class FileSystemElement_ 

其他类具有相同的结构 当我尝试这样做时:jpa tooles> 从实体生成表我有以下错误

线程“主”javax.persistence.PersistenceException 中的异常:异常 >[EclipseLink-28019](Eclipse 持久性服务 - 2.4.0.v20120608-r11652):org.eclipse.persistence.exceptions.EntityManagerSetupException 异常描述:PersistenceUnit [webtop] 的部署失败。关闭此 PersistenceUnit 的所有工厂。 内部异常:异常 [EclipseLink-0](Eclipse Persistence Services - 2.4.0.v20120608-r11652):org.eclipse.persistence.exceptions.IntegrityException

描述符异常:

异常 [EclipseLink-34] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.DescriptorException 异常描述:该类没有定义公共的默认构造函数,或者构造函数引发了异常。 内部异常:java.lang.InstantiationException 描述符:RelationalDescriptor(com.bfi.webtop.model.Application --> [DatabaseTable(application_)])

异常 [EclipseLink-34] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.DescriptorException 异常描述:该类没有定义公共的默认构造函数,或者构造函数引发了异常。 内部异常:java.lang.InstantiationException 描述符:RelationalDescriptor(com.bfi.webtop.model.Fichier --> [DatabaseTable(FICHIER)])

异常 [EclipseLink-34] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.DescriptorException 异常描述:该类没有定义公共的默认构造函数,或者构造函数引发了异常。 内部异常:java.lang.InstantiationException 描述符:RelationalDescriptor(com.bfi.webtop.model.Raccourci --> [DatabaseTable(RACCOURCI)])

运行时异常:

at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.createDeployFailedPersistenceException(EntityManagerSetupImpl.java:616)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:596)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:186)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:278)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:304)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:282)
at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.perform(Main.java:85)
at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.execute(Main.java:76)
at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.main(Main.java:63)
Caused by: Exception [EclipseLink-28019] (Eclipse Persistence Services -       2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.EntityManagerSetupException

异常描述:PersistenceUnit [webtop] 的部署失败。关闭此 PersistenceUnit 的所有工厂。 内部异常:异常 [EclipseLink-0](Eclipse Persistence Services - 2.4.0.v20120608-r11652):org.eclipse.persistence.exceptions.IntegrityException

我正在使用 Eclipse Juno 请问有什么帮助吗?

【问题讨论】:

为什么把默认的无参数应用构造函数注释掉了?错误状态 EclipseLink 无法启动您的类的新实例,因此它可能是相关的。 FileSystemElement 接口在哪里?我只看到一个FileSystemElement_ 类。 为什么ApplicationFichier 类是抽象的? 【参考方案1】:

您已将 Fichier 类定义为抽象类:

public abstract class Fichier

删除 abstract 就可以了。这种情况下的错误信息有些混乱。

【讨论】:

【参考方案2】:

由于错误状态,您需要为您的应用程序类提供一个默认(无参数)构造函数。

如果您不想将构造函数公开给您的应用,则可以是私有的。

【讨论】:

詹姆斯并没有改变什么 构造函数不应该是私有的,因为它违反了 JPA2 规范,该规范声明:The entity class must have a no-arg constructor. The entity class may have other constructors as well. The no-arg constructor must be public or protected【参考方案3】:

考虑在您的类中创建无参数构造函数,然后清理您的项目并尝试。 我有同样的问题,我用 lombok 解决了它

【讨论】:

以上是关于此类未定义公共默认构造函数,或构造函数引发异常。内部异常:java.lang.InstantiationException的主要内容,如果未能解决你的问题,请参考以下文章

此类应在 android manifest 中提供默认构造函数(不带参数的公共构造函数)

隐藏实用程序类构造函数:实用程序类不应具有公共或默认构造函数

wpf对类型“xxx.MainWindow”的构造函数执行符合指定的绑定约束的调用时引发了异常

小程序中存在构造函数会引发异常

未找到默认构造函数;嵌套异常是 java.lang.NoSuchMethodException bean 配置

c++ 默认构造函数 constexpr 还是正确未定义?