代码之家  ›  专栏  ›  技术社区  ›  Kirill

当使用方法访问属性时,如何使用@AttributeOverrides?

  •  0
  • Kirill  · 技术社区  · 8 年前

    到属性。它工作得很好,直到在另一个类中有两个或多个包含,其中我必须使用@AttributeOverrides。

    在这种情况下,我从Hibernate收到以下错误:

    映射为插入=“false”更新=“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;
    
        //...
    }
    

    1 回复  |  直到 8 年前
        1
  •  0
  •   Kirill    8 年前

    我找到了解决办法。这对我来说相当棘手。

    不是列的名称,而是变量的名称 日历日期 .

    @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;
    
        //...
    }
    

    此外,可嵌入类中的getter和setter应该与属性名完全匹配。