Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将多个表映射到一个列表Hibernate_Java_Mysql_Hibernate_Jpa - Fatal编程技术网

Java 将多个表映射到一个列表Hibernate

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

我一直在网上搜索,想找到解决办法。似乎没有人有答案。。。我开始觉得我处理这个问题的方式不对

让我们看看我能不能解释清楚

我正在制定维修合同。(表:反墨卡恩公司)。对于合同,我们将选择一个类别(表:categoria),每个类别在关系1-N(关系表categoria\u calidad)中都有质量(表:calidad

对于选择类别的每个合同,这些质量必须有一个值,因此我创建了一个表来涵盖这种关系:contrato\u categoria\u 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
。但它对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> 希望这有帮助