这是Hibernate食谱在第3章中的第一个问题,当我试图运行时,我在线程"main“org.hibernate.MappingException中得到了以下错误异常:实体映射中的重复列: com.fun.hibernate.auto.idgen.Order列: address (应该用insert=映射”false“update="false")
这是代码
@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;
}
}可嵌入对象
@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;
}
}有什么办法解决这个问题?
发布于 2014-03-12 02:33:01
阅读上面引用的Hibernate Recipes的书,我可以很容易地达到你在问题上所描述的观点。
我无法创建与您正在开发的环境相同的环境,因此我不得不阅读并解释这本书中关于通过注释和外部配置文件(XML)进行映射的内容。
通过研究您的代码和书中的章节,我认为很可能您在映射嵌入对象时做了一些冗余,所以我认为这正是(或接近它)问题所在:
在配置文件中,书中说要按标记创建手动映射,如下所示:
<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>在此之上,本书还指出,您需要通过注释创建映射:
@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;
}所以,我认为这里只有两种可能发生的事情:
就这样,祝你好运!
https://stackoverflow.com/questions/22336521
复制相似问题