Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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 Spring Boot JPA Hibernate:即使实体类中存在@Id,也没有为实体错误指定标识符_Java_Spring_Hibernate_Spring Boot_Jpa - Fatal编程技术网

Java Spring Boot JPA Hibernate:即使实体类中存在@Id,也没有为实体错误指定标识符

Java Spring Boot JPA Hibernate:即使实体类中存在@Id,也没有为实体错误指定标识符,java,spring,hibernate,spring-boot,jpa,Java,Spring,Hibernate,Spring Boot,Jpa,我得到一个“无标识符错误”,实体类“QuestionResponse”有两个@Id字段。问题与问题回答、回答与问题回答之间存在一种一元关系,所有这些类都是基于 我正在使用Postgres 9.5、Spring Boot 2.0.1,并将其部署在WildFly 11上 谢谢 questions.sql respones.sql 问题_respone.sql# Question.java Response.java 在JPA中,不能对实体中的多个字段使用@Id注释,除非将其定义为复合主键。因此,您需

我得到一个“无标识符错误”,实体类“QuestionResponse”有两个@Id字段。问题与问题回答、回答与问题回答之间存在一种一元关系,所有这些类都是基于

我正在使用Postgres 9.5、Spring Boot 2.0.1,并将其部署在WildFly 11上

谢谢

questions.sql respones.sql 问题_respone.sql# Question.java Response.java
在JPA中,不能对实体中的多个字段使用
@Id
注释,除非将其定义为复合主键。因此,您需要将
@IdClass
添加到
QuestionResponse
实体中,以便它包含多个主键字段


这可能与您的问题无关,但也值得一看,它显示了在JPA中使用
@ManyToMany
注释的最佳方法。

此问题的答案是否对您有所帮助@但我认为它们不会适用于我的问题。挑战之一是问题和响应之间的多对多映射。这是通过QuestionResponse完成的“没有为实体指定标识符”错误告诉您编译器没有找到定义的“ID”列,可能是因为QuestionResponse类/表具有多列主键而不是单列主键。链接问题的答案解释了实现多列主键实体的两种方法。我已经看到了这个示例,但没有太多用处,因为我需要将查询写入需要实体类的question_响应表。这个例子没有涵盖我的要求。我之所以添加这个例子,是因为我看到你有一个
@maytomy
关系,并认为这可能会对你有所帮助。您的主要问题是,在未标记为
@IdClass
的实体中有多个
@Id
CREATE TABLE questions( 
    id BIGSERIAL PRIMARY KEY,
    question VARCHAR(255)
);
CREATE TABLE responses( 
    id BIGSERIAL PRIMARY KEY,
    response VARCHAR(255)
);
CREATE TABLE question_response(
    question_id bigint REFERENCES questions ON DELETE CASCADE,
    response_id bigint REFERENCES responses ON DELETE CASCADE,
    PRIMARY KEY ( question_id, response_id)
);
@Entity
@Table(name = "questions")
public class Question{


    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="qid_seq")
    @SequenceGenerator(name = "qid_seq", sequenceName="questions_id_seq")
    @Column(name = "id")
    private Long id;


    @Column(name = "questionText")
    private String questionText;

    @OneToMany(mappedBy = "question", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<QuestionResponse> responses;

    public Question() {}

    public Question(String questionText) {
        super();
        this.questionText = questionText;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getQuestionText() {
        return questionText;
    }

    public void setQuestionText(String questionText) {
        this.questionText = questionText;
    }

    public List<QuestionResponse> getResponses() {
        return responses;
    }
}
@Entity
@Table(name = "question_response")
public class QuestionResponse {

    @Id
    @ManyToOne 
    private Question question;

    @Id
    @ManyToOne 
    private Response response;



    public QuestionResponse() {
        super();
    }

    public QuestionResponse(Question question, Response response) {
        super();
        this.question= question;
        this.response = response;
    }

    public Question getQuestion() {
        return question;
    }

    public void setQuestion(Question question) {
        this.question = question;
    }

    public Response getResponse() {
        return response;
    }

    public void setResponse(Response response) {
        this.response = response;
    }

}
@Entity
@Table(name = "responses")
public class Response {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="rid_seq")
    @SequenceGenerator(name = "rid_seq", sequenceName="questions_id_seq")
    @Column(name = "id")
    private Long id;

    @Column(name = "responseText")
    private String responseText;

    @OneToMany(mappedBy = "response", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<QuestionResponse> question;

    public Response() {}

    public Response(String responseText) {
        super();
        this.responseText = responseText;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getResponseText() {
        return responseText;
    }

    public void setResponseText(String responseText) {
        this.responseText = responseText;
    }

    public List<QuestionResponse> getQuestion() {
        return question;
    }

}
13:54:49,581 ERROR [org.springframework.boot.SpringApplication] (ServerService Thread Pool -- 86) Application run failed: org.springframework.beans.factory.BeanCreationException:
 Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]:
 Invocation of init method failed; nested exception is org.hibernate.AnnotationException:
 No identifier specified for entity: com.poc.questionnarie.QuestionResponse