Создать составной уникальный ключ, используя два внешних ключа

Я использую MySQL в качестве базы данных и работаю с JPA и хочу создать таблицу quarter_level_result в котором у меня есть два внешних ключа, т.е. quarter_id а также department_id, Я хочу спроектировать таблицу таким образом, чтобы комбинация этих двух клавиш была уникальной.

так что я кодирую так:

@Entity
@Table(name = "quarter_level_result",
       uniqueConstraints= {@UniqueConstraint(
                                columnNames = {"quarter_id", "department_id"})})
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, 
                  property  = "id", 
                  scope     = Long.class)
@DynamicInsert(true)
@DynamicUpdate(true)
public class QuarterLevelResult implements Serializable {

    private static final long serialVersionUID = 6418708201861121181L;

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(optional = false )
    @JoinColumn(name = "quarter_id", unique = true)
    private QuarterLevel quarterLevel;

    @Transient
    private Long quarterId;

    @NotNull
    @Column(name = "current_level")
    private Long currentLevel;

    @NotNull
    @Column(name = "current_cost")
    private Long currentCost;

    @JoinColumn(name = "department_id", unique = true)
    @ManyToOne(optional = false)
    private Departments departmentInfoForQuarterResult;

    @Transient
    private Long departmentId;

    // getters and setters
}

Проблема:

Первоначально я вставил запись с (quar_id, Department_id) =(1,2), он работает нормально. после этого я вставил еще одну запись (quar_id, Department_id) =(2,2), но этот тип я получил ошибку дубликат записи 2 для отдела_ид.

1 ответ

Просто удали unique = true от @JoinColumn: это ярлык для создания уникального ключа только для этого столбца.

@Table#uniqueConstraints достаточно.

Другие вопросы по тегам