Java 将多个表映射到一个列表Hibernate
我一直在网上搜索,想找到解决办法。似乎没有人有答案。。。我开始觉得我处理这个问题的方式不对 让我们看看我能不能解释清楚 我正在制定维修合同。(表:反墨卡恩公司)。对于合同,我们将选择一个类别(表:categoria),每个类别在关系1-N(关系表categoria\u calidad)中都有质量(表:calidad) 对于选择类别的每个合同,这些质量必须有一个值,因此我创建了一个表来涵盖这种关系:contrato\u categoria\u calidad.Java 将多个表映射到一个列表Hibernate,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,我一直在网上搜索,想找到解决办法。似乎没有人有答案。。。我开始觉得我处理这个问题的方式不对 让我们看看我能不能解释清楚 我正在制定维修合同。(表:反墨卡恩公司)。对于合同,我们将选择一个类别(表:categoria),每个类别在关系1-N(关系表categoria\u calidad)中都有质量(表:calidad) 对于选择类别的每个合同,这些质量必须有一个值,因此我创建了一个表来涵盖这种关系:contrato\u categoria\u calidad. @Entity @Table(nam
@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
。但它对hibernate不起作用
不管怎么说,现在,ContratoCategoriaCalidad作为独立实体表现良好。但我需要手动执行每个案例的所有维护、更新和删除…:(
我真正想要的(我认为是一种更好的做法)是,当我像其他实体一样保存或更新合同时,进行级联,但我找不到在contrat\u 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;
@OneToOne
@JoinColumn(name=“condition”)
私人条件;
@OneToMany(cascade={CascadeType.ALL})
@可接合(
name=“contrato\u mercan\u condition”,
joinColumns=@JoinColumn(name=“CONTRATO\u MERCAN\u ID”)
,inverseJoinColumns=@JoinColumn(name=“condition\u ID”)
)
私人名单条件;
但我所有映射这一点的尝试都失败了,我想要的是在我的Java实体contrat_mercan中有这样一个字段:
private List<ContratoCategoriaCalidad> relacionContratoCategoriaCalidad;
private List relaconcontractionegorialidad;
不是数据库中的真实列,只是关系的表示
我找到了连接同一个表的多个字段的解决方案,但没有与3个表建立关系
有什么想法吗?我做错了什么?也许我必须使用中间表categoria\u calidad来执行此操作
谢谢!!如果您想从ContratTo实体访问相关ContratToCategorIACalidad对象的列表,您需要使用适当的注释声明这两个实体之间的关系 在ContratoCategoriaCalidad类更改字段中,更改为:
@ManyToOne
@JoinColumn(name = "CONTRATO_ID")
private Contrato contrato;
与类添加字段相反:
@OneToMany(mappedBy = "contrato")
private List<ContratoCategoriaCalidad> relacionContratoCategoriaCalidad;
@OneToMany(mappedBy=“contrato”)
私有列表关系协议;
如果要启用级联更新和移除,请考虑添加级联= CasCADEType。ALL和孤儿删除=真属性到@ OneToMany注释。< /P> 希望这有帮助