首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@属性覆盖和@Embeddable无效

@属性覆盖和@Embeddable无效
EN

Stack Overflow用户
提问于 2014-03-11 20:59:57
回答 1查看 1.5K关注 0票数 0

这是Hibernate食谱在第3章中的第一个问题,当我试图运行时,我在线程"main“org.hibernate.MappingException中得到了以下错误异常:实体映射中的重复列: com.fun.hibernate.auto.idgen.Order列: address (应该用insert=映射”false“update="false")

这是代码

代码语言:javascript
复制
@Entity
@org.hibernate.annotations.Entity(dynamicInsert=true, dynamicUpdate=true)
@Table(name="ORDERS")
public class Order {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="orderSequence" )
@SequenceGenerator(name="orderSequence",sequenceName="ORDERSEQ")
private Long id;


private Contact weekdayContact;
private Contact holidayContact;
public Order() {

}


public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}

public Contact getWeekdayContact() {
    return weekdayContact;
}
public void setWeekdayContact(Contact weekdayContact) {
    this.weekdayContact = weekdayContact;
}

@Embedded
@AttributeOverrides({
    @AttributeOverride(name="recipient",column=@Column(name ="HOLIDAY_RECIPIENT")),
    @AttributeOverride(name="phone",column=@Column(name ="HOLIDAY_PHONE")),
    @AttributeOverride(name="address",column=@Column(name ="HOLIDAY_ADDRESS"))
})
public Contact getHolidayContact() {
    return holidayContact;
}
public void setHolidayContact(Contact holidayContact) {
    this.holidayContact = holidayContact;
}
}

可嵌入对象

代码语言:javascript
复制
@Embeddable
public class Contact {

private String recipient;
private String phone;

private String address;
public Contact() {

}
@Column(name = "WEEKDAY_RECIPIENT")
public String getRecipient() {
    return recipient;
}
public void setRecipient(String recipient) {
    this.recipient = recipient;
}
@Column(name ="WEEKDAY_PHONE")
public String getPhone() {
    return phone;
}
public void setPhone(String phone) {
    this.phone = phone;
}
@Column(name ="WEEKDAY_ADDRESS")
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}

}

有什么办法解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2014-03-12 02:33:01

阅读上面引用的Hibernate Recipes的书,我可以很容易地达到你在问题上所描述的观点。

我无法创建与您正在开发的环境相同的环境,因此我不得不阅读并解释这本书中关于通过注释和外部配置文件(XML)进行映射的内容。

通过研究您的代码和书中的章节,我认为很可能您在映射嵌入对象时做了一些冗余,所以我认为这正是(或接近它)问题所在:

在配置文件中,书中说要按标记创建手动映射,如下所示:

代码语言:javascript
复制
        <component name="weekdayContact" class="Contact">
            <property name="recipient" type="string" column="WEEKDAY_RECIPIENT" />
            <property name="phone" type="string" column="WEEKDAY_PHONE" />
            <property name="address" type="string" column="WEEKDAY_ADDRESS" />
        </component>
        <component name="holidayContact" class="Contact">
            <property name="recipient" type="string" column="HOLIDAY_RECIPIENT" />
            <property name="phone" type="string" column="HOLIDAY_PHONE" />
            <property name="address" type="string" column="HOLIDAY_ADDRESS" />
        </component>

在此之上,本书还指出,您需要通过注释创建映射:

代码语言:javascript
复制
@Embedded
@AttributeOverrides({
    @AttributeOverride(name="recipient",column=@Column(name ="HOLIDAY_RECIPIENT")),
    @AttributeOverride(name="phone",column=@Column(name ="HOLIDAY_PHONE")),
    @AttributeOverride(name="address",column=@Column(name ="HOLIDAY_ADDRESS"))
})
public Contact getHolidayContact() {
    return holidayContact;
}

所以,我认为这里只有两种可能发生的事情:

  1. 在XML文件和类中映射嵌入的对象。在这种情况下,您应该只通过一种类型,最好是通过注释。
  2. 我可以看到,您的代码与书中所述的代码不同,这可能是导致失败的原因。在这种情况下,您应该再读一遍您的整个代码,并查看是否有任何与书中的代码不同的地方,然后更正它就像在示例中所写的一样。

就这样,祝你好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22336521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档