Spring 映射实体中的重复列
我在我的项目中使用JPA嵌入式实体 我有一个可嵌入的类Spring 映射实体中的重复列,spring,jpa,spring-data-jpa,Spring,Jpa,Spring Data Jpa,我在我的项目中使用JPA嵌入式实体 我有一个可嵌入的类 @Embeddable public class Address { private String addressLine1; private String addressLine2; private String city; private String state; private String zipCode; public String getAddressLine1() { return addressLine1; }
@Embeddable
public class Address {
private String addressLine1;
private String addressLine2;
private String city;
private String state;
private String zipCode;
public String getAddressLine1() {
return addressLine1;
}
public void setAddressLine1(String addressLine1) {
this.addressLine1 = addressLine1;
}
public String getAddressLine2() {
return addressLine2;
}
public void setAddressLine2(String addressLine2) {
this.addressLine2 = addressLine2;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getZipCode() {
return zipCode;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
}
我把这个类嵌入到这里
@Entity
public class Customer implements
DomainObject{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Version
private Integer version;
private String firstName;
private String lastName;
private String email;
private String phoneNumber;
@Embedded
private Address billingAddress;
@Embedded
private Address shippingAddress;
@OneToOne
private User user;
@Override
public Integer getId() {
return id;
}
@Override
public void setId(Integer id) {
this.id = id;
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Address getBillingAddress() {
return billingAddress;
}
public void setBillingAddress(Address billingAddress) {
this.billingAddress = billingAddress;
}
public Address getShippingAddress() {
return shippingAddress;
}
public void setShippingAddress(Address shippingAddress) {
this.shippingAddress = shippingAddress;
}
}
运行该项目后,我发现这是一个错误
映射实体中的重复列:theo.tziomakas.udemy.domain.Customer列:账单\地址\行1(应使用insert=“false”update=“false”映射) 你可以克隆我的,如果你想和检查它自己 我也试过这个答案,但什么也没得到 更新 我通过使用AttributeOverride注释解决了这个错误
@Embedded
@AttributeOverrides({
@AttributeOverride( name = "addressLine1",
column = @Column(name = "billing_address_line1")
),
@AttributeOverride( name = "addressLine2",
column = @Column(name = "billing_address_line2")
),
@AttributeOverride( name = "city",
column = @Column(name = "billing_city")
),
@AttributeOverride( name = "state",
column = @Column(name = "billing_state")
),
@AttributeOverride( name = "zipCode",
column = @Column(name = "billing_zip_code")
)
})
private Address billingAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride( name = "addressLine1",
column = @Column(name = "shipping_address_line1")
),
@AttributeOverride( name = "addressLine2",
column = @Column(name = "shipping_address_line2")
),
@AttributeOverride( name = "city",
column = @Column(name = "shipping_city")
),
@AttributeOverride( name = "state",
column = @Column(name = "shipping_state")
),
@AttributeOverride( name = "zipCode",
column = @Column(name = "shipping_zip_code")
)
})
private Address shippingAddress;
因此,我克隆了您的存储库,发现问题是因为您在
Customer.java
中嵌入了两次地址-shippingAddress
和billingAddress
。我建议使用@AttributeOverride
注释来解决此问题。请参阅此
像这样更改实体字段
@Embedded
@AttributeOverrides({
@AttributeOverride(name="addressLine1",column=@Column(name="billingAddressLine1")),
@AttributeOverride(name="addressLine2",column=@Column(name="billingAddressLine2")),
@AttributeOverride(name="city",column=@Column(name="billingCity")),
@AttributeOverride(name="state",column=@Column(name="billingState")),
@AttributeOverride(name="zipCode",column=@Column(name="billingZipCode")),
})
private Address billingAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name="addressLine1",column=@Column(name="shippingAddressLine1")),
@AttributeOverride(name="addressLine2",column=@Column(name="shippingAddressLine2")),
@AttributeOverride(name="city",column=@Column(name="shippingCity")),
@AttributeOverride(name="state",column=@Column(name="shippingState")),
@AttributeOverride(name="zipCode",column=@Column(name="shippingZipCode")),
})
private Address shippingAddress;
因此,我克隆了您的存储库,发现问题是因为您在
Customer.java
中嵌入了两次地址-shippingAddress
和billingAddress
。我建议使用@AttributeOverride
注释来解决此问题。请参阅此
像这样更改实体字段
@Embedded
@AttributeOverrides({
@AttributeOverride(name="addressLine1",column=@Column(name="billingAddressLine1")),
@AttributeOverride(name="addressLine2",column=@Column(name="billingAddressLine2")),
@AttributeOverride(name="city",column=@Column(name="billingCity")),
@AttributeOverride(name="state",column=@Column(name="billingState")),
@AttributeOverride(name="zipCode",column=@Column(name="billingZipCode")),
})
private Address billingAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name="addressLine1",column=@Column(name="shippingAddressLine1")),
@AttributeOverride(name="addressLine2",column=@Column(name="shippingAddressLine2")),
@AttributeOverride(name="city",column=@Column(name="shippingCity")),
@AttributeOverride(name="state",column=@Column(name="shippingState")),
@AttributeOverride(name="zipCode",column=@Column(name="shippingZipCode")),
})
private Address shippingAddress;
你能发布你的数据库模式吗?@Maruthi Adithya。这有必要吗?我现在不能。你如何在你的数据库中存储
billingAddress
?它是平面的还是JSON?如果是平面的,你给它分配了什么数据库列名?它与Address
完全相同吗?@Maruthi Adithya列与地址相同。@Maruthi Adithya。但是现在我什么也不存储,因为我得到了所描述的异常。但是你可以克隆并运行该项目以获得更好的想法!你能发布你的数据库架构吗?@Maruthi Adithya。这是必要的吗?我现在不能。你如何在数据库中存储billingAddress
?是平面的还是平面的JSON?同样,如果它是平面的,那么您为它指定的数据库列名是什么?它是否与Address
完全相同?@Maruthi Adithya.tit是平面的。是的,列与Address相同。@Maruthi Adithya。但是现在我没有存储任何内容,因为我得到了描述的异常。但是您可以克隆并运行该项目以获得更好的想法!