Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 缺少具有EmbeddedId的实体的默认构造函数_Java_Hibernate_Jpa_Spring Data - Fatal编程技术网

Java 缺少具有EmbeddedId的实体的默认构造函数

Java 缺少具有EmbeddedId的实体的默认构造函数,java,hibernate,jpa,spring-data,Java,Hibernate,Jpa,Spring Data,当我试图从JPA存储库中获取实体列表时,总是会遇到这样的异常 org.springframework.orm.jpa.JpaSystemException: No default constructor for entity: : pl.hycom.hyper.hyebok.model.ServiceEntity$Id; nested exception is org.hibernate.InstantiationException: No default constructor for en

当我试图从JPA存储库中获取实体列表时,总是会遇到这样的异常

org.springframework.orm.jpa.JpaSystemException: No default constructor for entity:  : pl.hycom.hyper.hyebok.model.ServiceEntity$Id; nested exception is org.hibernate.InstantiationException: No default constructor for entity:  : pl.hycom.hyper.hyebok.model.ServiceEntity$Id
我的实体中缺少什么。我在可嵌入类和外部类中都有非args构造函数和所有args构造函数。我找不到解决这个问题的办法

下面是我的实体

@Entity
@Table(name = "he_service")
public class ServiceEntity implements Serializable {

    @EmbeddedId
    private Id id ;
    private String name;

    public ServiceEntity() {
    }

    public ServiceEntity(Id id, String name) {
        this.id = id;
        this.name = name;
    }

    @Embeddable
    class Id implements Serializable {

        public Id() {
        }

        public Id(String serviceId, String clientId) {
            this.serviceId = serviceId;
            this.clientId = clientId;
        }

        @Column(name = "serviceId")
        private String serviceId;
        @Column(name = "clientId")
        private String clientId;

        public String getServiceId() {
            return serviceId;
        }

        public void setServiceId(String serviceId) {
            this.serviceId = serviceId;
        }

        public String getClientId() {
            return clientId;
        }

        public void setClientId(String clientId) {
            this.clientId = clientId;
        }


   }
那里的存储库方法

   @Query(value= "SELECT s FROM ServiceEntity s " +
            "WHERE s.id.clientId = :clientId")
    List<ServiceEntity> findByClientId(@Param("clientId") String clientId);
@Query(value=“从服务实体s中选择s”+
“其中s.id.clientId=:clientId”)
列出findByClientId(@Param(“clientId”)字符串clientId);

Id
类设置为静态。否则它将需要一个
ServiceEntity
的实例来实例化。

您的内部
Id
类是非静态的,这意味着它创建了一个构造函数

class Id implements Serializable {

    public Id(ServiceEntity arg0) {
    }
    // …
}
将其更改为
静态

static class Id implements Serializable {
    // …
}

如果需要保存在不同的包中,您还可以在自己的
Id.java
文件中声明
Id
,如
class Id{}
public class Id{}

一般相关信息:

可能问题是
Spring
在这方面失败了

需要包含ServiceEntity.ID的封闭实例


我是Java新手,一直在探索全栈Java和angular应用程序

我创建了一个服务,允许我执行CRUD操作并将数据存储在内存数据库中

我试图在
http://localhost:8080/users/Joe/all-待办事项
我得到了OP提出的错误

为了解决我的问题,我必须创建一个默认构造函数,如下所示:

//JPA在我的实体类ToDo中需要一个默认构造函数
受保护的ToDo(){}

注意这里我使用的是JPA。我只是将默认构造函数添加到我的实体类中,然后运行我的java应用程序,它呈现了数据


希望这对错误消息有所帮助。

尝试将您的
Id
类设置为静态。