java - hibernate 和jpa : table with composite primary key : auto increment problem

标签 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

她的问题是:hibernate 给我这个表 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 但我希望 hibernate 仅生成列 id 作为 auto_increment 字段,正如我在实体 3 中提到的那样 我希望有人可以帮助我解决这个问题。 我没有为实体 3 使用嵌入式 ID,我认为我们可以在没有嵌入式 ID 的情况下做到这一点,因为我发现它非常难以实现,当我尝试在这种情况下使用嵌入式 ID 时,它会出现一些错误。

最佳答案

HistCarb 中,您在 3 个字段上有 @Id,这就是您获得复合键的原因。从 stationcarburant 中删除 @Id,如下所示:

@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();

    }
}

关于java - hibernate 和jpa : table with composite primary key : auto increment problem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53795498/

相关文章:

java - Spring webflux 中的异常处理

mysql - 在MySql中创建事件表触发器

mysql - MySQL中的反向连接

mysql - 在sql中显示超过3个月的记录

hibernate - Spring Mvc Controller - 删除问题

java - Proguard 使 android 应用程序中的 R 类反射不再起作用

Java 显然是按值传递,但需要一些说明

java - Mongo 对 Java 中两个字段的非重复值计数

java - 从 hibernate 迁移到持久化

java - 实体映射中的重复列应使用插入 ="false"更新 ="false"进行映射