我一直试图在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是从上面的设置生成的,我相信这是问题的根源,因为它应该更新三个值中的任何一个而不是仅更新计数器,因为三个值中的任何一个都可以更改。
UPDATE PRIMARY_INFO_CLUB_CODE SET COUNTER =吗?在哪里((CLUB_CODE_ID =?)AND(PRIMARY_INFO_ID =?))
我不确定该怎么做,并且很难弄清楚。 我没睡很多,所以我希望这很有意义。
任何帮助将不胜感激。