Mapping multiple tables to one List Hibernate
我一直在网上搜索以找到解决方案。似乎没有人提供答案...我开始认为我以错误的方式解决了问题。
让我看看我能否解释简单。
我正在开发合同维护。 (表:contrat_mercan)。对于合同,我们将选择一个类别(表:categoria),每个类别具有与关系1-N(关系表categoria_calidad)相关的质量(表:calidad)。
在选择了类别的每个合同中,此质量必须具有一个值,因此我创建了一个表来涵盖此关系:contoto_categoria_calidad。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | @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 |
在此表中,我想避免使用
无论如何,现在ContratoCategoriaCalidad作为独立实体还可以。但我将需要针对每种情况手动实施所有维护,更新,删除...:(
当我
这非常适合同一表中的其他关系:
1 2 3 4 5 6 7 8 9 10 11 | @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实体中拥有一个contt_mercan这样的字段:
1 | private List<ContratoCategoriaCalidad> relacionContratoCategoriaCalidad; |
不是数据库中的实际列,只是关系的表示。
我找到了在同一位置,此处和此处连接同一表的多个字段的解决方案,但没有与3个表建立关系...
有什么主意吗?我做错了什么?也许我必须使用中间表categoria_calidad来执行此操作?
谢谢!!
如果要从Contrato实体访问相关的ContratoCategoriaCalidad对象的列表,则需要使用适当的注释声明这两个实体之间的关系。
在ContratoCategoriaCalidad类更改字段中:
1 2 3 | @ManyToOne @JoinColumn(name ="CONTRATO_ID") private Contrato contrato; |
在Contrato类中添加字段:
1 2 | @OneToMany(mappedBy ="contrato") private List<ContratoCategoriaCalidad> relacionContratoCategoriaCalidad; |
如果要启用级联更新和删除,请考虑在@OneToMany批注中添加cascade = CascadeType.ALL和orphanRemoval = true属性。
希望这会有所帮助!