gpt4 book ai didi

java - 如何在 Spring Boot 中为只有外键的表映射/创建实体类

转载 作者:行者123 更新时间:2023-11-30 07:46:47 26 4
gpt4 key购买 nike

我的数据库 (Postgres) 中有以下表格:questionsresponsesquestion_response。问题表和响应表之间存在多对多关系,我已经为这两种关系创建了实体类。我现在必须为没有任何主键的 question_respone 表创建一个实体映射。

我读过有关使用 @IdClass@EmbeddedId 的内容,但是,我不确定如何映射两个外键,这两个外键是两个不同类中的主键这些注释。

注意事项:

在实现评论中提到的更改后更新实体

谢谢!

问题.sql

CREATE TABLE questions( 
id BIGSERIAL PRIMARY KEY,
question VARCHAR(255)
);

响应.sql

CREATE TABLE responses( 
id BIGSERIAL PRIMARY KEY,
response VARCHAR(255)
);

question_respone.sql #

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)
);

问题.java

@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;
}
}

问题响应.java

@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;
}

}

响应.java

@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;
}

}

# WildFly 控制台#

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

最佳答案

关于java - 如何在 Spring Boot 中为只有外键的表映射/创建实体类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50381013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com