线程“main”中的异常org.hibernate.MappingException:实体映射中的重复列

时间:2013-08-04 15:58:34

标签: java hibernate

我是Hibernate的初学者。

我收到此错误消息但无法弄清楚出现了什么问题:

  

线程“main”中的异常org.hibernate.MappingException:实体映射中的重复列:com.hibernate.aris.Subscribers列:city(应使用insert =“false”update =“false”映射)“< / p>

我在某处读到必须将HBM文件中的属性设置为“反向”,但我真的不知道这意味着什么。

任何建议都会受到赞赏吗?

名为Address

的可嵌入类
@Embeddable
public class Address {
    @Column (name = "STREET_NAME")
    private String street;

    @Column (name = "CITY_NAME")
    private String city;

    @Column (name = "POST_CODE")
    private String postcode;

    public String getStreet() {
        return street;
    }
    public void setStreet(String street) {
        this.street = street;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getPostcode() {
        return postcode;
    }
    public void setPostcode(String postcode) {
        this.postcode = postcode;
    }
}

订阅者类

@Entity
@Table(name = "Subscriberstbl")
public class Subscribers {

    private int subID;
    private String firstname;
    private String lastname;

    @Embedded
    @AttributeOverrides({
    @AttributeOverride(name ="street", column = @Column(name="HOME_STREET_NAME")), 
    @AttributeOverride(name = "city", column = @Column(name="HOME_CITY_NAME")), 
    @AttributeOverride(name = "postcode", column = @Column(name="HOME_POST_CODE"))})
    private Address homeaddress;

    @Embedded
    private Address officeaddress;

    //Getters and Setters
    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;
    }

    @Id
    @GeneratedValue
    public int getSubID() {
        return subID;
    }
    public void setSubID(int subID) {
        this.subID = subID;
    }

    public Address getOfficeAddress() {
        return officeaddress;
    }

    public void setOfficeAddress(Address address) {
        this.officeaddress = address;
    }

  public Address getHomeaddress() {
        return homeaddress;
    }

    public void setHomeaddress(Address homeaddress) {
        this.homeaddress = homeaddress;
    }

}

1 个答案:

答案 0 :(得分:3)

您正在通过FIELD(字段注释)和PROPERTY(访问者注释)混合访问权限,而PROPERTY是赢家,因此忽略@AttributesOverride
尝试将@Id @GeneratedValue从访问者移动到字段类。

相关问题