gpt4 book ai didi

java - 按主键删除具有复合键的实体

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:08 27 4
gpt4 key购买 nike

我有 4 张 table 。

国家/地区(id、名称)、CountryType(id、名称)、客户端(id、名称)和Country_CountryType_Client关系表(country_id、countryType_id、client_id)。

这是我的国家/地区类别:

@GeneratePojoBuilder(
intoPackage = "*.builder")

@Entity
@Table(name = "MD_COUNTRY")
@SequenceGenerator(
name = "SEQ_MD_COUNTRY",
sequenceName = "SEQ_MD_COUNTRY",
allocationSize = 1)
public class Country implements Serializable {

private static final long serialVersionUID = -3313476149373055743L;
private Long md_country_id;
private String nameKey;
private List<CountryCountryTypeClient> cCTypeClients;

@Id
@GeneratedValue(
generator = "SEQ_MD_COUNTRY")
@Column(
name = "MD_COUNTRY_ID")
public Long getMd_country_id() {
return md_country_id;
}

public void setMd_country_id(Long md_country_id) {
this.md_country_id = md_country_id;
}

@Column(name = "MD_COUNTRY_NAME_KEY")
public String getNameKey() {
return this.nameKey;
}

public void setNameKey(String name) {
this.nameKey = name;
}


@OneToMany(fetch=FetchType.EAGER,mappedBy="pk.country",cascade=CascadeType.ALL)
public List<CountryCountryTypeClient> getCountryCountryTypeClient() {
return cCTypeClients;
}

public void setCountryCountryTypes(List<CountryCountryTypeClient> countryCountryTypeClient) {
this.cCTypeClient = countryCountryTypeClient;
}
/* ... hashCode and equals methods..*/

CountryTypeClient 类 看起来相同。

这是我的CountryCountryTypeClient类:

@GeneratePojoBuilder(
intoPackage = "*.builder")
@Entity
@Table(
name = "COUNTRY_COUNTRY_TYPE_CLIENT")
@AssociationOverrides({
@AssociationOverride(name= "pk.country",
joinColumns=@JoinColumn(name = "COUNTRY_ID")),
@AssociationOverride(name="pk.countryType",
joinColumns=@JoinColumn(name = "COUNTRY_TYPE_ID")),
@AssociationOverride(name="pk.client",
joinColumns=@JoinColumn(name = "CLIENT_ID"))
})
public class CountryCountryTypeClient implements Serializable{

private static final long serialVersionUID = -879391903880384781L;

private CountryCountryTypeClientPK pk = new CountryCountryTypeClientPK();

public CountryCountryTypeClient() {}

@EmbeddedId
public CountryCountryTypeClientPK getPk() {
return pk;
}

public void setPk(CountryCountryTypeClientPK pk) {
this.pk = pk;
}

@Transient
public Country getCountry(){
return getPk().getCountry();
}

public void setCountry(Country country) {
getPk().setCountry(country);
}

@Transient
public CountryType getCountryType(){
return getPk().getCountryType();
}

public void setCountryType(CountryType countryType) {
getPk().setCountryType(countryType);
}

@Transient
public Client getClient() {
return getPk().getClient();
}

public void setClient(Client client) {
getPk().setClient(client);
}

/* ... hashCode and equals ... */

这是我的CountryCountryTypeClientPK类:

@Embeddable
public class CountryCountryTypeClientPK implements Serializable {

private static final long serialVersionUID = -3934592006396010170L;

private Country country;
private CountryType countryType;
private Client client;


public CountryCountryTypeClientPK() {}

@ManyToOne
public Country getCountry() {
return country;
}
public void setCountry(Country country) {
this.country = country;
}

@ManyToOne
public CountryType getCountryType() {
return countryType;
}
public void setCountryType(CountryType countryType) {
this.countryType = countryType;
}

@ManyToOne
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}

/*... hashCode and equals methods ..*/

我的CountryCountryTypeClientRepository类:

public interface CountryCountryTypeRepository extends JpaRepository<CountryCountryTypeClient, CountryCountryTypeClientPK> {}

对于我的 Country 类,我有带有 saveCountry 方法的 CountryService 类:

public Country saveCountry(final Country dtoCountry) {
//save NEW Country
if(dtoCountry.getId()==null){
de.bonprix.global.masterdata.model.Country modelWithoutID = convertToModel(dtoCountry);

for (CountryCountryTypeClient cCTypeClient : modelWithoutID.getCountryCountryTypeClients()) {
cCTypeClient.setCountry(modelWithoutID);
}
return convertToDTO(this.countryRepository.saveAndFlush(modelWithoutID));
}

//save EDITED Country
else if (!(dtoCountry.getId()==null)){
de.bonprix.global.masterdata.model.Country modelWithID = convertToModel(dtoCountry);

for (CountryCountryTypeClient cCTypeClient : modelWithID.getCountryCountryTypeClients()) {
cCTypeClient.setCountry(modelWithID);
ccTypeClientRepository.delete(cCTypeClient);
}
return convertToDTO(this.countryRepository.saveAndFlush(modelWithID));
}
return null;
}

问题是:如何按 Country_ID 从 Country_CountryType_Client 表中删除所有行。不是通过 PK,而是通过 Country_ID。当我在国家/地区表中保存国家/地区时,Country_CountryType_Client 会自动更新为相应的值。

小例子,只是为了解决当前的问题。现在我的 Country_CountryType_Client 表中有这个。

here enter

现在我想保存除最后一行 (298-2-9) 之外具有所有相同关系的 NewCountry。我的NewCountry对(298-2-9关系)一无所知。在保存之前,我必须删除所有 id 为 298 的行。

希望问题清楚。

最佳答案

我不太明白这个问题。似乎您真正想做的就是从标识符为 298 的国家/地区中删除单个 CountryCountryTypeClient。

因此,如果您要按照以下概述更新映射:

https://docs.oracle.com/cd/E19798-01/821-1841/giqxy/

 @OneToMany(fetch=FetchType.EAGER,mappedBy="pk.country",cascade=CascadeType.ALL, orphanRemoval = true)
public List<CountryCountryTypeClient> getCountryCountryTypeClient() {
return cCTypeClients;
}

然后您可以简单地执行以下操作:

Country country = // the country with id 298
CountryCountryTypeClient client = // the client with id 298/2/9
country.getCountryCountryTypeClient().remove(client);
countryRepository.save(country);

关于java - 按主键删除具有复合键的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41180672/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com