По сути, у меня есть поиск, который использует большое представление SQL для извлечения данных, и теперь мне нужно расширить функциональность поиска для другого поля, взятого из отдельного представления.
Я выполнил шаги, описанные в этом ссылка , но я застрял.
Я хочу создать отношение многие ко многим между представлениями V_FPDA_FILE_RTL_UNT и V_FPDA_FILE_UK_CONTN.
У меня есть таблица FpdaFileDetail, сопоставленная с представлением V_FPDA_FILE_RTL_UNT.
@Entity(name="FpdaFileDetail")
@Table(name="V_FPDA_FILE_RTL_UNT")
@AttributeOverrides({ @AttributeOverride(name = "id", column = @Column(name = "FPDA_FILE_ID")) })
public class FpdaFileDetail {
...
@ManyToMany
@Fetch(FetchMode.SUBSELECT)
@JoinTable(name = "V_FPDA_FILE_UK_CONTN", joinColumns = { @JoinColumn(name = "FPDA_FILE_ID") }, inverseJoinColumns = {@JoinColumn(name = "UK_CMPT_CONTN_ID")})
public Set<UkComponentContent> getUkContentIds() {
return ukContentIds;
}
public void setUkContentIds(Set<UkComponentContent> ukContentIds) {
this.ukContentIds = ukContentIds;
}
Созданная мной связь «многие ко многим» сделана так:
@Entity
@Table(name="UK_CONTN")
@AttributeOverrides({ @AttributeOverride(name = "id", column = @Column(name = "UK_CONTN_ID")) })
public class UkContent {
private static final long serialVersionUID = 1L;
private String contentId;
private Set<UkComponentContent> ukComponentContents;
@Column(name = "UK_CONTN")
public String getContentId() {
return contentId;
}
public void setContentId(String contentId) {
this.contentId = contentId;
}
@OneToMany(
mappedBy = "ukContent",
cascade = CascadeType.ALL,
orphanRemoval = true
)
public Set<UkComponentContent> getUkComponentContents() {
return ukComponentContents;
}
public void setUkComponentContents(Set<UkComponentContent> ukComponentContents) {
this.ukComponentContents = ukComponentContents;
}
}
@Entity(name = "FpdaFile")
@Table(name = "FPDA_FILE")
@AttributeOverrides({ @AttributeOverride(name = "id", column = @Column(name = "FPDA_FILE_ID")) })
public class FpdaFile {
...
private Set<UkComponentContent> ukContentIds = new HashSet<UkComponentContent>(0);
@OneToMany(mappedBy = "fpdaFile")
public Set<UkComponentContent> getUkContentIds() {
return ukContentIds;
}
public void setUkContentIds(Set<UkComponentContent> ukContentIds) {
this.ukContentIds = ukContentIds;
}
}
@Entity
@Table(name="UK_CMPT_CONTN")
@AttributeOverrides({ @AttributeOverride(name = "id", column = @Column(name = "UK_CMPT_CONTN_ID")) })
public class UkComponentContent extends BaseEntity {
private FpdaFile fpdaFile;
private UkContent ukContent;
@ManyToOne
@JoinColumn(name = "FPDA_FILE_ID")
public FpdaFile getFpdaFile() {
return fpdaFile;
}
public void setFpdaFile(FpdaFile fpdaFile) {
this.fpdaFile = fpdaFile;
}
@ManyToOne
@JoinColumn(name = "UK_CONTN_ID")
public UkContent getUkContent() {
return ukContent;
}
public void setUkContent(UkContent ukContent) {
this.ukContent = ukContent;
}
}
Дело в том, что если я разрешу код, подобный этому, поиск не будет работать, но он не выдаст никакой ошибки.После отладки я понял, что если я прокомментирую это (из FpdaFileDetail) ..
@ManyToMany
@Fetch(FetchMode.SUBSELECT)
@JoinTable(name = "V_FPDA_FILE_UK_CONTN", joinColumns = { @JoinColumn(name = "FPDA_FILE_ID") }, inverseJoinColumns = {@JoinColumn(name = "UK_CMPT_CONTN_ID")})
public Set<UkComponentContent> getUkContentIds() {
return ukContentIds;
}
public void setUkContentIds(Set<UkComponentContent> ukContentIds) {
this.ukContentIds = ukContentIds;
, поиск будет работать.Но без комментариев он не работает.
Любая идея приветствуется!