【发布时间】:2018-10-30 16:21:32
【问题描述】:
我想用一个额外的列创建多对多关系。我配置了这个:
@Entity
public class Configuration extends AbstractEntity {
@OneToMany(
mappedBy = "configuration",
cascade=CascadeType.ALL,
orphanRemoval = true
)
@JsonIgnore
private List<ConfigurationQuestion> configurationQuestions = new ArrayList<>();
public void addQuestion(QuestionDTO question) {
ConfigurationQuestion configurationQuestion = new ConfigurationQuestion(this,
question.getQuestion(), question.getResponse());
configurationQuestions.add(configurationQuestion);
}
}
加入表
@Entity
public class ConfigurationQuestion implements Serializable {
@EmbeddedId
private ConfigurationQuestionId id ;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("configurationId")
private Configuration configuration;
@ManyToOne(fetch = FetchType.EAGER)
@MapsId("questionId")
@JoinColumn(name="question_id")
private Question question;
private Integer response;
public ConfigurationQuestion(Configuration configuration, Question question,
Integer response) {
this.configuration = configuration;
this.question = question;
this.response = response;
this.id = new ConfigurationQuestionId(configuration.getId(), question.getId());
}
}
可嵌入ID
@Embeddable
public class ConfigurationQuestionId implements Serializable {
private Long configurationId;
private Long questionId;
}
有问题我没有任何映射我想做一个方向。我的问题是当我尝试保存这样的东西时。我想保存一个配置,它的问题只是 id 不是整个对象,它是单独保存的。
在问题实体中,我没有任何映射,我想单向进行。我的问题是当我尝试保存这样的东西时。我想保存一个配置,它的问题/问题只是 id 而不是整个对象,它是单独保存的。
Configuration configuration = new Configuration();
Question question = new Question();
question.setId(1L);
configuration.addQuestion(new QuestionDTO(question, 1));
repository.save(configuration);
我收到以下错误。我不想级联对 Question 实体的更改,如果我从 Configuration 中删除 Cascade.ALL 不会在连接表中插入任何内容。我可以在不查找问题的情况下执行此操作吗?
detached entity passed to persist: Question
【问题讨论】:
-
@K.Nicholas 这个答案甚至与 OP 的问题无关。
-
同样的事情。 “我如何在 spring-data-jpa 中使用 ManyToMany 关联”。他想要一个单向的答案,而且还有更多。
-
不,完全不同。您链接的答案是关于一个引用自身的实体。这只是在您知道它的主键 时添加对另一个不同 实体的外键引用,这样您就不想承担从数据库中查询实体的开销.
-
你能告诉我如何避免因问题而触发数据库吗?