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

原文 标签 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时会出现一些错误。

最佳答案

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

    }
}

关于java - hibernate&jpa:具有复合主键的表:自动递增问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53795498/

相关文章:

mysql - 如何从codeigniter的数据库表中获取偶数/奇数id号

php - Ckeditor并使用$ _POST插入Mysql

java - Jboss 7.1.1正确的 hibernate 依赖关系

java - 将 Arraylist 转换为 json

java - 为什么整数与数字连接会产生字符串?

php - CodeIgniter:无法使用提供的设置连接到您的数据库服务器错误消息

mysql - 为什么即使我使用“验证”,Hibernate也总是在数据库中删除数据?

java - 如何使用Hibernate更新实体而不是将其插入数据库?

java - ReSTLet路由不适用于该路由中的Directory吗?

java - 启动 Activity 时,应用程序可能在其主线程上做过多的工作