【发布时间】:2017-10-12 09:08:17
【问题描述】:
这里是CampaignEntity.class 实体:
@Entity
@Table(name = "campaign")
public class CampaignEntity implements Serializable {
@Id
@SequenceGenerator(name = "campaign_id_gen", sequenceName = "campaign_seq", initialValue = 1, allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "campaign_id_gen")
private Long id;
@OneToMany(cascade = CascadeType.REMOVE, mappedBy = "campaignId", fetch = FetchType.EAGER, targetEntity = CampaignCountry.class)
private List<CampaignCountry> countries;
@Column(name = "include_countries")
private Boolean includeCountries;
// getters & setters, toString, hashEquals
}
这是我正在尝试映射的CampaignCountry.class:
@Entity
@Table(name = "campaign_country")
@IdClass(CampaignCountry.CampaignCountryPK.class)
public class CampaignCountry {
@Id
@Column(name="campaign_id")
private Long campaignId;
@Id
@Column(name="country")
private String country;
public CampaignCountry(String country) {
this.country = country;
}
//getters and setters
static class CampaignCountryPK implements Serializable {
private Long campaignId;
private String country;
public CampaignCountryPK() {}
public CampaignCountryPK(Long campaignId, String country) {
this.campaignId = campaignId;
this.country = country;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CampaignCountryPK that = (CampaignCountryPK) o;
if (campaignId != null ? !campaignId.equals(that.campaignId) : that.campaignId != null) return false;
return country != null ? country.equals(that.country) : that.country == null;
}
@Override
public int hashCode() {
int result = campaignId != null ? campaignId.hashCode() : 0;
result = 31 * result + (country != null ? country.hashCode() : 0);
return result;
}
}
}
当我打电话给repository.saveAndFlush(campaignEntity) 时,问题就来了。它可以根据需要保存国家/地区,但不能保存 CampaignId。它始终为空。
org.springframework.orm.jpa.JpaObjectRetrievalFailureException:Unable to find domain.CampaignCountry with id domain.CampaignCountry$CampaignCountryPK@e43;
嵌套异常是 javax.persistence.EntityNotFoundException: Unable to find domain.CampaignCountry with id domain.CampaignCountry$CampaignCountryPK@e43
这是迁移 SQL 脚本(如果它与任何事情有关):
CREATE TABLE campaign_country (
campaign_id BIGINT NOT NULL,
country CHARACTER VARYING(2) NOT NULL,
PRIMARY KEY (campaign_id, country)
);
ALTER TABLE campaign_country
ADD CONSTRAINT campaign_to_campaign_country FOREIGN KEY (campaign_id) REFERENCES campaign (id);
那么这里出了什么问题,我如何用相应的活动实体的 ID 填充活动 ID?我确实相信它有一些 @OneToMany 注释,它可能没有正确实现。
【问题讨论】:
-
尝试使用
@OneToMany(cascade = CascadeType.ALL, mappedBy = "campaignId", fetch = FetchType.EAGER, targetEntity = CampaignCountry.class) -
实体类看起来很奇怪,你是怎么创建的?
-
@juvenislux 没有帮助。仍然为空。
标签: java hibernate jpa hibernate-mapping