Создать составной уникальный ключ, используя два внешних ключа
Я использую 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
достаточно.