由一个外键组成的主键

时间:2018-09-05 08:25:14

标签: java hibernate mapping

我正在用Hibernate做一个JEE Web应用程序。 我正在使用带注释的bean进行映射。

我展示

enter image description here 尽管我在论坛和其他网站上进行了研究,但无法像上图那样使主键由外键组成。

我只是设法将我的“ id-command”键放在FK中,但我希望她撰写PK。

预先感谢您的帮助。

祝你有美好的一天。

1 个答案:

答案 0 :(得分:-1)

谢谢您的回答。

首次启动应用程序时,数据库没有表。它们是由Hibernate创建的。

我给您我的代码(我给您的代码中没有getter和setter方法): 类 BonLivraison (该类的代码结尾仅需尝试)

程序包sii.dsi.beans;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.*;

@SuppressWarnings("serial")
@Entity
@Table
public class BonLivraison implements Serializable{
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id_bon_livraison;
    @Column(nullable=false, length=255, unique=false)
    private String numero_bon_livraison;
    @Column(nullable=false, unique=false)
    private double montant_bon_livraison;
    @Column(nullable=false, unique=false)
    private Date date_bon_livraison;
    @Column(nullable=false, unique=false)
    private Date date_depot_facture;

    @OneToOne
    @JoinColumn(name="id_commande")
    private PosteLigne poste_ligne_id_commande; 
    @OneToOne
    @JoinColumn(name="id_posteligne")
    private PosteLigne poste_ligne_id;

    // Getters and Setters
}

Commande 类:

package sii.dsi.beans;

import java.io.Serializable;

import javax.persistence.*;

import sii.dsi.beans.Affaire;

@SuppressWarnings("serial")
@Entity
@Table
public class Commande implements Serializable{
    @Column
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id_commande;
    @Column(nullable=false, length=255, unique=false)
    private String numero_commande;
    @Column(nullable=false, length=255, unique=false)
    private String numero_bc;
    @OneToOne
    private Affaire affaire;

}

PosteLigne 类:

package sii.dsi.beans;

import java.io.Serializable;

import javax.persistence.*;

@SuppressWarnings("serial")
@Entity
@Table
public class PosteLigne implements Serializable{

    @EmbeddedId
    private PosteLignePK poste_ligne_pk;
    @Id
    private int id_poste_ligne;
    @Column(nullable=false, unique=false)
    private double montant_poste_ligne;
    @Column(nullable=false, unique=false)
    private boolean clos;
    @Column(nullable=false, unique=false)
    private int numero_ligne;

}

PosteLignePK

package sii.dsi.beans;

import java.io.Serializable;

import javax.persistence.*;

@SuppressWarnings("serial")
@Embeddable
public class PosteLignePK implements Serializable{

    private int id_poste_ligne;
    @OneToOne
    @JoinColumn(name="id_commande")
    private Commande commande;


    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + id_poste_ligne;
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        PosteLignePK other = (PosteLignePK) obj;
        if (id_poste_ligne != other.id_poste_ligne)
            return false;
        return true;
    }

}

错误消息:

  

一个外键,引用来自的sii.dsi.beans.PosteLigne   sii.dsi.beans.BonLivraison的列数错误。应该是2

我认为问题在于BonLivraison课程的结束。

感谢您的帮助