【问题标题】:Getting org.hibernate.AssertionFailure: Unexpected nested component on the referenced entity when mapping a @MapsId获取 org.hibernate.AssertionFailure:映射@MapsId 时引用实体上的意外嵌套组件
【发布时间】:2018-02-27 02:22:10
【问题描述】:
I have a table structure like that :- 

    @Entity
@Table(name = "Load_Container_Tray")
public class LoadContainerTray {

    @EmbeddedId
    private LoadContainerTrayPK loadContainerTrayPK;

    @MapsId("loadContainerPK")
    @JoinColumns({
        @JoinColumn(name = "dest_ebu_nbr", referencedColumnName = "dest_ebu_nbr"),
        @JoinColumn(name = "outbound_load_id", referencedColumnName = "outbound_load_id"),
        @JoinColumn(name = "dest_ebu_cntry_code", referencedColumnName = "dest_ebu_cntry_code"),
        @JoinColumn(name = "ctnr_trackg_id", referencedColumnName = "ctnr_trackg_id") })
    @ManyToOne
    private LoadContainer loadcontainer;
}

@Embeddable 公共类 LoadContainerTrayPK 实现可序列化 {

private static final long serialVersionUID = 3392075534159950245L;

@Basic
private LoadContainerPK loadContainerPK;

@Column(name = "load_unit_id", columnDefinition = "char(32)")
private String loadUnitId;

}

@Entity
@Table(name = "load_container")
public class LoadContainer {

    @EmbeddedId
    private LoadContainerPK loadContainerPK;

    @MapsId("loadDestinationPK")
    @JoinColumns({
        @JoinColumn(name = "dest_ebu_nbr", referencedColumnName = "dest_ebu_nbr"),
        @JoinColumn(name = "outbound_load_id", referencedColumnName = "outbound_load_id"),
        @JoinColumn(name = "dest_ebu_cntry_code", referencedColumnName = "dest_ebu_cntry_code") })
    @ManyToOne
    private LoadDestination loadDestination;

    @Column(name = "row_nbr")
    private short rowNumber;
}

@Embeddable
public class LoadContainerPK implements Serializable {

    private static final long serialVersionUID = 3392075534159950245L;

    @Basic
    private LoadDestinationPK loadDestinationPK;

    @Column(name = "ctnr_trackg_id")
    private String containerTrackingId;
}

公共类 LoadDestination {

@EmbeddedId
    private LoadDestinationPK loadDestinationPK;

    @MapsId("outboundLoadId")
    @JoinColumn(name = "outbound_load_id", referencedColumnName = "outbound_load_id")
    @ManyToOne
    private OutboundLoad outboundLoad;

}

@Embeddable
public class LoadDestinationPK implements Serializable {

    private static final long serialVersionUID = -3548089581858405303L;

    @Column(name = "outbound_load_id")
    private String outboundLoadId;

    @Column(name = "dest_ebu_nbr")
    private Integer destinationId;

    @Column(name = "dest_ebu_cntry_code")
    private String destEbuCntryCode;

}
@Entity
@Table(name = "outbound_load")
public class OutboundLoad {

    @Id
    @Column(name = "outbound_load_id", columnDefinition = "char(30)")
    private String outboundLoadId;

    @Column(name = "load_id")
    private int loadId;
}

当我尝试在 TOMEE 服务器上部署应用程序时,我收到此错误:-

" org.apache.openejb.OpenEJBException: org.apache.openejb.OpenEJBRuntimeException: org.hibernate.AssertionFailure: 映射@MapsId 时引用实体上的意外嵌套组件:com.walmart.move.nim.outdoc.entity .LoadContainer: org.hibernate.AssertionFailure: 映射@MapsId: com.walmart.move.nim.outdoc.entity.LoadContainer 时引用实体上的意外嵌套组件。

谁能帮我解决这个问题。

【问题讨论】:

  • 能否提供OutboundLoad
  • @osamayaccoub 我也添加了 OutboundLoad 类。请仔细查看。
  • @osamayaccoub 我已经编辑了链关系。问题在于 LoadContainerTrayPK 与 LoadContainerPK 有 PK。

标签: hibernate jpa orm entity


【解决方案1】:

我认为你应该注释 private LoadDestinationPK loadDestinationPK; in LoadContainerPK@Embedded 而不是 @Basic,你为什么用 @Basic 注释它,这个类将如何映射为基本类型?

【讨论】:

  • 我尝试从 Basic 更改为 Embedded。但它向我显示编译时错误:- 属性“loadDestinationPK”在此上下文中具有无效的映射类型。
  • 您使用的是哪个版本的 JPA?
  • 我们正在使用 hibernate-entitymanager-4.2.19.Final 我正在使用这个 org.apache.openejbjavaee-api6.0-6提供 。适用于所有 JAVA ee 功能。
  • 尝试在 Window -> Preferences -> Java Persistence -> JPA -> Errors/Warnings -> Attributes -> Cannot resolve attribute name 下的 Eclipse 中关闭对此的验证 .. 根据 stackoverflow.com/questions/12106124/…
  • 还可以尝试在LoadDestinationPK 上显式添加@Access(AccessType.FIELD) ... 使用此显式注释嵌套嵌入类(尽管它是默认设置)有时是解决方案
猜你喜欢
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 2013-12-05
相关资源
最近更新 更多