最初,我使用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 实用程序重新生成类时,不会丢失映射。