我在我的類中的單向@ManyToMany
關係,具體如下:分配舊的對象,以新對象的ID將將它插入重複@ManyToMany
@ManyToMany(cascade = {
CascadeType.MERGE,
CascadeType.PERSIST
})
@JoinTable(
name=TABLE_NAME_JOB_JOB_TYPE,
[email protected](name=COLUMN_JOB_ID, referencedColumnName = COLUMN_JOB_ID),
inverseJoinColumns = @JoinColumn(name=COLUMN_JOB_TYPE_ID, referencedColumnName = COLUMN_JOB_TYPE_ID)
)
@Fetch(FetchMode.JOIN)
private Set<JobTypeModel> types;
我有一個很難更新作業類型的數量,一個工作,因爲一個簡單的錯誤,我終於找到了。 但是,我不知道爲什麼會發生這種情況。
基本上,我做了什麼,是我有一個方法合併舊的和新的工作,而不是採取從newJob的一切,並添加到oldJob,我採用oldJob的ID,並將其分配給newJob 。
所以,像這樣:
public JobModel mergeAndUpdate(JobModel oldJob, JobModel newJob) {
getLoggerService().debug(this.getClass().getSimpleName(), "mergeAndUpdate({oldJob}, {newJob})");
//newJob.setId(oldJob.getId()); //If doing this, then it fails
//Was trying to avoid doing this:
oldJob.setX(newJob.getX());
oldJob.setY(newJob.getY());
oldJob.setZ(newJob.getZ());
return getJobRepository().saveAndFlush(oldJob);
//return getJobRepository().saveAndFlush(newJob);
}
我JobRepository是延伸org.springframework.data.jpa.repository.JpaRepository
做這件事時,試圖堅持更新(要麼加一,或一個刪除jobType)時的界面,它會失敗。
當添加一個新的jobType時,它會告訴我在關聯表JOB_JOB_TYPE中有一個重複的條目。
Hibernate: insert into job_job_type (job_id, job_type_id) values (?, ?)
2017-11-26 00:02:28.202 WARN 74560 --- [p-nio-80-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1062, SQLState: 23000
2017-11-26 00:02:28.202 ERROR 74560 --- [p-nio-80-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper : Duplicate entry '187-2' for key 'PRIMARY'
2017-11-26 00:02:28.203 INFO 74560 --- [p-nio-80-exec-6] o.h.e.j.b.internal.AbstractBatchImpl : HHH000010: On release of batch it still contained JDBC statements
從作業集中刪除jobType並保留新作業時,什麼都不會發生 - >關係仍然會保留。
有人知道爲什麼嗎?這樣做,對於沒有@ManyToMany
關係的對象(即將舊對象的ID添加到新對象中,而不是將新對象中的所有其他對象添加到舊對象,都將嘗試更新,調用saveAndFlush
方法時
我使用: MariaDB的28年1月10日 春季啓動1.5.4(與相關的彈簧引導啓動數據JPA)
行爲對我來說是持久的,在邏輯上,您必須先刪除舊記錄(使用X id),以添加具有相同ID的新記錄。也許嘗試保存字段'整數臨時'id值,刪除舊記錄,並嘗試從'臨時'添加新的ID – newOne
這意味着兩個查詢。我解決問題的方式只使用一個查詢。我只想知道爲什麼其他方法不起作用,並解釋實際發生的情況。而且由於我無法找到任何地方,這個具體問題,我認爲這也可以幫助其他人。 –