Я пытался реализовать нечто похожее на следующую структуру в JPA (Eclipselink):
class PrimaryInfo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "primaryInfo", orphanRemoval = true)
private List<PrimaryInfoClubCode> clubCodes = new ArrayList<>();
}
class ClubCode {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "clubCode", orphanRemoval = true)
private List<PrimaryInfoClubCode> holdingPrimaryInfos = new ArrayList<>();
private String code;
private String description;
}
Используя следующий EmbeddedId и таблицу соединения:
@Embeddable
class PrimaryInfoClubCodeId implements Serializable {
private Long primaryInfoId;
private Long clubCodeId;
}
class PrimaryInfoClubCode {
@EmbeddedId
private PrimaryInfoClubCodeId id;
@ManyToOne(fetch = FetchType.EAGER)
@MapsId("primaryInfoId")
private PrimaryInfo primaryInfo;
@ManyToOne(fetch = FetchType.EAGER)
@MapsId("clubCodeId")
private ClubCode clubCode;
private Long counter;
}
Проблема, с которой я столкнулся сейчас, заключается в том, что я хотел бы, чтобы счетчик был частью первичного ключа, чтобы позволить PrimaryInfo
иметь несколько записей ClubCode
, пока они имеютотличающееся counter
значение.
Следующий SQL генерируется из вышеупомянутой установки, и я считаю, что это корень проблемы, так как он должен скорее обновить любой из трех, а не только счетчик, так каклюбое из трех значений может быть изменено.
ОБНОВЛЕНИЕ PRIMARY_INFO_CLUB_CODE SET COUNTER =? ГДЕ ((CLUB_CODE_ID =?) И (PRIMARY_INFO_ID =?))
Я не уверен, как это сделать, и мне трудно понять это. У меня не было много сна, и я надеюсь, что это имеет смысл.
Любая помощь будет безмерно признательна.