【问题标题】:JPA Mapping Error -not provided sufficient metadata in your id classJPA 映射错误 - 没有在您的 id 类中提供足够的元数据
【发布时间】:2011-01-19 07:00:45
【问题描述】:

我正在尝试在 JPA 中进行映射。

@Entity
public class Auction {

    @Id
    private Integer auctionId;

    @OneToMany(mappedBy="auctionId")
    @MapKey(name="auctionParamId")
    private Map<AuctionParam, AuctionParamValue> values;

}

@Entity
public class AuctionParam {

    @Id
    private Integer auctionParamId;

    private String description;

}

@Entity
public class AuctionParamValue {

    @EmbeddedId
    private AuctionParamValuePK pk;

    private String value;

}

@Embeddable
public class AuctionParamValuePK {

    @ManyToOne
    @JoinColumn(name="auctionId")
    private Auction auction;

    @ManyToOne
    @JoinColumn(name="auctionParamId")
    private AuctionParam auctionParam;

}

显示错误:-

.Error-Details:-异常描述: 实体[类 com.eaportal.domain.AuctionParamValue]
使用 [类 com.eaportal.domain.AuctionParamValuePK]
作为嵌入式 id 类
访问类型 已被确定为 [FIELD]。
但 [班级 com.eaportal.domain.AuctionParamValuePK]
没有定义任何 [FIELD]。这是 可能您没有提供
id 类中有足够的元数据 [班级 com.eaportal.domain.AuctionParamValuePK]。

如果您想出解决方案,请告诉我。

提前致谢 图沙尔

【问题讨论】:

    标签: java spring jpa eclipselink jpa-2.0


    【解决方案1】:

    您不能将 EmbeddedId 用于关系。使用 IdClass。

    @Entity
    @IdClass(AuctionParamValuePK.class)
    public class AuctionParamValue {
    
        @Id
        @ManyToOne
        @JoinColumn(name="auctionId")
        private Auction auction;
    
        @Id
        @ManyToOne
        @JoinColumn(name="auctionParamId")
        private AuctionParam auctionParam;
    
        @Basic
        private String value;
    
    }
    
    public class AuctionParamValuePK {
    
        private int auction;
        private int auctionParam;
    
    }
    

    【讨论】:

      【解决方案2】:

      我认为您的 Auction 课程中存在一些错误。我觉得应该是这样的

      @Entity
      public class Auction {
      
          @Id
          private Integer auctionId;
      
          @OneToMany(mappedBy="auction") // not auctionId
          @MapKey(name="auctionParam") // not auctionParamId
          private Map<AuctionParam, AuctionParamValue> values;
      
      }
      

      (注释值必须与字段(或属性)相对应,而不是与列相对应)

      【讨论】:

      • 感谢您的回答,我进行了更正,但仍然遇到同样的错误,还有其他指针吗?
      • 我现在面临这个问题。有人知道答案吗?
      猜你喜欢
      • 2020-06-18
      • 2017-05-02
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      相关资源
      最近更新 更多