我一直在网上搜索找出解决方案。似乎没有人有答案......我开始认为我在解决问题的方式是错误的。将多个表映射到一个列表休眠
让我们看看我能否解释简单。
我正在开发合同维护。 (表: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来执行此操作?
谢谢!