如何在hibernate中映射静态内部类?

时间:2015-06-17 07:28:44

标签: java hibernate jaxb

最初,我使用XJC(JAXB实用程序)生成Java类。如何安排注释以保存ClaimType的实体? ClaimType和Reason与OneToMany相关。

package com.belkam.res.domain;

import com.belkam.utils.DateUtils;
import javax.persistence.*;
import javax.xml.datatype.XMLGregorianCalendar;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;


public class ClaimType {
    protected long claimId;
    protected long rsnPart;
    protected ClaimType.ReasonList resasonList;
    //Defalut constructor and getters &setters
    public static class ReasonList {
        protected List<ClaimType.ReasonList.Reason> reason;
        public List<ClaimType.ReasonList.Reason> getReason() {
            if (reason == null) {
                reason = new ArrayList<ClaimType.ReasonList.Reason>();
            }
            return this.reason;
        }
        public static class Reason {
            protected long reasonId;
            protected int reasonType;
            protected String reasonNum;
            @Transient
            protected XMLGregorianCalendar reasonDate;
            protected String lineNum;
            protected String resBsNum;
            //Defalut constructor and getters &setters
        }
    }
}

1 个答案:

答案 0 :(得分:0)

当您使用混合样式进行注释(字段和getter)时,似乎会出现此异常。您应该始终对单个实体使用一种方法:注释字段或getter。

另外,显式指定目标实体可能会有所帮助,也许Hibernate与内部类混淆:

*(uchar*)rsGetElementAt(...)

通常,Hibernate支持静态内部类作为实体。虽然我不确定JPA,但是Hibernate和JPA之间可能存在一些不匹配(尽管我认为Hibernate作为JPA的超集仍然允许使用JPA注释)。

如果这是JPA规范问题,您可以尝试在hbm文件中为这些实体定义映射。这样做的另一个好处是,当您使用JAXB实用程序重新生成类时,不会松散映射。