我在使用关系对象保存对象时遇到问题。
这是数据库的简短截图。
我在数据库中已有几个品牌。我有很多smarthfones作为JSON数据,我想把它推送到数据库。这些智能手机是类似的品牌。
Smartphone smartphone = new Smartphone();
String deviceName = array.getJSONObject(i).getString("DeviceName");
smartphone.setName(deviceName);
...
//other related objects
...
String brandValue = array.getJSONObject(i).getString("Brand");
Brand brand = brandService.findByName(brandValue); // get brand from database by name
smartphone.setBrandId(brand);
smartphoneService.saveSmartphone(smartphone);
我从名字中获取品牌并为智能手机设置品牌。在包括smathpone所需的所有对象后,我保存智能手机。我收到了错误
Duplicate entry '1-8' for key 'PRIMARY'
这与品牌有关,因为数据库中有8个品牌。
我尝试将级联类型更改为PERSIST,ALL,RFRESH并且我始终保持相同。
@Entity
public class Smartphone {
@Id
@Column(name = "id")
public int getId() {
return id;
}
@ManyToOne(fetch=FetchType.EAGER, cascade=CascadeType.REFRESH)
@JoinColumn(name = "brand_id", referencedColumnName = "id", nullable = false)
public Brand getBrandId() {
return brandId;
}
public void setBrandId(Brand brandId) {
this.brandId = brandId;
}
}
@Entity
public class Brand {
@Id
@Column(name = "id")
public int getId() {
return id;
}
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "brandId")
public Collection<Smartphone> getBrandId() {
return brandId;
}
public void setBrandId(Collection<Smartphone> brandId) {
this.brandId = brandId;
}
}