hibernate&jpa:具有复合主键的表:自动递增问题

时间:2018-12-15 17:21:00

标签: java mysql hibernate jpa

我有那些实体:

@Entity
public class Carburant implements Serializable{

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id_carburant")
    private long id;
    private String nom;
    private String description;

    @JsonIgnore
    @OneToMany(mappedBy="carburant")
    private Set<HistCarb> stations ;

    public Carburant() {
        super();
    }
}

2

@Entity
@Table(name="Station")
public class Station implements Serializable{

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id_station")
    private long id ;
    private String nom;
    private String ville;
    private String adresse;

    @Transient
    private boolean nul = false;

    @JsonIgnore
    @OneToMany(mappedBy="station")
    private Set<HistCarb> historiques ;

    public Station() {
        super();
    }
}

3

@Entity

public class HistCarb implements Serializable{

    @Id
    @Column(name="id",updatable=false,nullable=false)
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long id;

    private Date date;
    private Integer prix;

    @Id
    @ManyToOne
    @JoinColumn(name="id_station")

    private Station station ;

    @Id
    @ManyToOne
    @JoinColumn(name="id_carburant")
    private Carburant carburant ;


    public HistCarb() {
        super();

    }
}

类图: enter image description here

和她的问题是:休眠给我表HistCarb的此sql代码:

create table HistCarb (
       id bigint not null,
        date datetime,
        prix integer,
        id_station bigint not null auto_increment,
        id_carburant bigint not null,
        primary key (id_station, id, id_carburant)
    ) engine=InnoDB

使用id_station auto_increment,但我希望休眠状态仅将列ID作为auto_increment字段生成,就像我在实体3中提到的那样 我希望有人可以帮助我解决这个问题。 我没有为实体3使用嵌入式ID,我认为我们可以在没有嵌入式ID的情况下做到这一点,因为我发现实现起来非常困难,并且当我尝试在这种情况下使用嵌入式ID时会出现一些错误。

1 个答案:

答案 0 :(得分:0)

HistCarb中,您在3个字段上都有@Id,这就是为什么您得到复合键的原因。像这样从@Idstation中删除carburant

@Entity
public class HistCarb implements Serializable{

    @Id
    @Column(name="id",updatable=false,nullable=false)
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long id;

    private Date date;
    private Integer prix;

    @ManyToOne
    @JoinColumn(name="id_station")

    private Station station ;

    @ManyToOne
    @JoinColumn(name="id_carburant")
    private Carburant carburant ;


    public HistCarb() {
        super();

    }
}