我有一个具有方法访问权限的可嵌入类属性。它工作正常,直到我必须使用@AttributeOverrides的另一个类中有两个或更多包含。
在这种情况下,我从Hibernate收到以下错误:
实体映射中的重复列:... column:grn_date(应该是 map with insert =“false”update =“false”)
看来Hibernate由于某些原因不了解方法访问。如果我使用公共属性访问一切正常,但我需要当前的一个从XMLGregorianCalendar字段获取日历日期。
可嵌入课程:
@Embeddable
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "...")
public class GrnType {
@XmlAttribute(name = "...")
@Transient
protected String grn;
@XmlAttribute(name = "...", required = true)
@Transient
protected XMLGregorianCalendar dateOfEntry;
@Transient
private Calendar calendarDate;
@Access(AccessType.PROPERTY)
@Column(name = "grn")
public String getGrn() {
return grn;
}
@Access(AccessType.PROPERTY)
@Column(name = "grn_date")
private Calendar getCalendarDate() {
if(dateOfEntry!=null) {
return new GregorianCalendar(dateOfEntry.getYear(), dateOfEntry.getMonth(), dateOfEntry.getDay());
}else {
return null;
}
}
// ...setters here
}
嵌入的类:
@Entity
@Table(name="RealEstateDFl")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {...})
public class GrnEntity {
//...
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "grn", column = @Column(name = "grn_main")),
@AttributeOverride(name = "grn_date", column = @Column(name = "grn_date_main"))
})
protected GrnType grnType;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "grn", column = @Column(name = "grn_sec")),
@AttributeOverride(name = "grn_date", column = @Column(name = "grn_date_sec"))
})
protected GrnType grnTypeSecondary;
//...
}
在这种情况下,有人可以建议如何正确覆盖属性吗?或者可能是什么解决方案?
答案 0 :(得分:0)
我找到了解决方案。这对我来说非常棘手。
在嵌入式的类中,它需要设置而不是列的名称,而是设置变量的名称,在我的情况下,它是 calendarDate 。
所以这是一个有效的例子:
@Entity
@Table(name="RealEstateDFl")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {...})
public class GrnEntity {
//...
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "grn", column = @Column(name = "grn_main")),
@AttributeOverride(name = "calendarDate", column = @Column(name = "grn_date_main"))
})
protected GrnType grnType;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "grn", column = @Column(name = "grn_sec")),
@AttributeOverride(name = "calendarDate", column = @Column(name = "grn_date_sec"))
})
protected GrnType grnTypeSecondary;
//...
}
Embeddable类中的getter和setter也应该与属性名称完全匹配。