我一直在網上搜索找出解決方案。似乎沒有人有答案......我開始認爲我在解決問題的方式是錯誤的。將多個表映射到一個列表休眠
讓我們看看我能否解釋簡單。
我正在開發合同維護。 (表:contrat_mercan)。對於合同,我們將選擇一個類別(表格:categoria),每個類別具有關係1-N(關係表categoria_calidad)的品質(表格:calidad)。
這個質量必須爲每個合同選擇一個類別的價值,所以我創建了一個表來涵蓋這種關係:contrato_categoria_calidad。
@Entity
@Table(name = "contrato_categoria_calidad")
public class ContratoCategoriaCalidad implements Serializable{
// Constants --------------------------------------------------------
private static final long serialVersionUID = -1821053251702048097L;
// Fields -----------------------------------------------------------
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "CCC_ID")
private int id;
@Column(name = "CONTRAT_MERCAN_ID")
private int contratoId;
@Column(name = "CATEGORIA_ID")
private int categoriaId;
@Column(name = "CALIDAD_ID")
private int calidadId;
@Column(name = "VALOR")
private double valor;
.... getters/ setters
在此表中我想避免具有Id
,三個字段被標記爲FK在數據庫和第一次嘗試與所述三個字段@JoinColumn
其中。但它不適用於休眠。
無論如何,現在ContratoCategoriaCalidad作爲獨立的實體表現良好。但我將需要實施所有維護,更新,刪除手動每個案件... :(
我真的想要什麼,(我認爲是一個更好的做法)是一個級聯當我saveOrUpdate
合同作爲其他實體做,但我不覺得做一個列表在contrat_mercan路表
這是在同一個表中的其他關係工作完美:
@OneToOne
@JoinColumn(name="CONDICION")
private Condicion condicion;
@OneToMany (cascade = {CascadeType.ALL})
@JoinTable(
name="contrato_mercan_condicion",
joinColumns = @JoinColumn(name="CONTRATO_MERCAN_ID")
,inverseJoinColumns = @JoinColumn(name="CONDICION_ID")
)
private List<Condicion> condiciones;
但我所有的嘗試這個映射失敗了,我想要的是在我的Java實體中有contr at_mercan場這樣的:
private List<ContratoCategoriaCalidad> relacionContratoCategoriaCalidad;
不是在數據庫中的實際列,只是關係的表示。
我找到的解決辦法加入同一個表,here的多個領域,並here,但不是真正的關係有3個表...
任何想法?我做錯了什麼?也許我必須使用中級表categoria_calidad來執行此操作?
謝謝!