【问题标题】:Hibernate @OneToMany ConstraintViolationException休眠@OneToMany ConstraintViolationException
【发布时间】:2013-01-27 10:14:12
【问题描述】:

问题是我希望有可能为不同的预订使用相同的 parachute_id,但是当我保存具有相同 parachute_id 的预订时,我得到: org.hibernate.exception.ConstraintViolationException: Duplicate entry '78' for key 'parachute_id'

这是我的代码:

@OneToMany  
@JoinTable(name="reservation_parachute")  
Collection<Parachute> parachute = new ArrayList<Parachute>();    

以及数据库示例:
Reservation_id parachute_id
130 76
129 75
127 51
127 63
126 10
126 2
126 1
131 77
133 78

【问题讨论】:

标签: java mysql hibernate constraints


【解决方案1】:

我认为您将@OneToMany 与@ManyToMany 混合在一起。

这样读:

One 预订“拥有”Many Parachute

但是你想要这样的东西:

Many预订“分享”Many降落伞

希望对你有帮助。

【讨论】:

    【解决方案2】:

    在您描述的情况下,您不需要多对多连接表。

    对于降落伞有不同的保留,我会这样做:

    在 Resrvation.java 中

    @ManyToOne
    @JoinColumn(name = "parachuteID")
    private Parachute parachute;
    

    在 Parachute.java 中

    @OneToMany(mappedBy = "parachute")
    private List<Reservation> reservations;
    

    这样降落伞就会有一个预订列表。

    【讨论】:

    • Parachute 知道 Reservation 是一个糟糕的设计。
    • 这由 OP 决定,在任何情况下您都可以从 Parachute 中删除 Reservation 列表并仅保留 Parachute 上的 Reservation
    猜你喜欢
    • 2013-10-24
    • 2013-07-01
    • 1970-01-01
    • 2015-07-07
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多