如何在休眠中映射静态内部类



最初,我使用XJC(JAXB实用程序)生成Java类。如何排列注释以保存ClaimType的实体? 索赔类型和原因与一对多相关。

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
        }
    }
}
当您

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

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

@OneToMany(... targetEntity = ClaimType.ReasonList.class)

一般来说,Hibernate支持静态内部类成为实体。不过我不确定 JPA,也许这里的 Hibernate 和 JPA 之间存在一些不匹配(尽管我认为 Hibernate 作为 JPA 的超集仍然允许这样做,即使有 JPA 注释)。

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

最新更新