【发布时间】:2014-12-12 20:24:49
【问题描述】:
我一直在网上寻找解决方案。似乎没有人知道答案...我开始认为我解决问题的方式不对。
让我们看看我是否可以简单地解释一下。
我正在开发合同维护。 (表: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 实体 contrat_mercan 中有一个像这样的字段:
private List<ContratoCategoriaCalidad> relacionContratoCategoriaCalidad;
不是数据库中的真实列,只是关系的表示。
我找到了连接同一个表的多个字段的解决方案,here 和 here,但不与 3 个表建立关系...
有什么想法吗?我做错了什么?也许我必须使用中间表 categoria_calidad 来执行此操作?
谢谢!!
【问题讨论】: