在 EmbeddedId 中使用 @JoinColumn 会生成 org.hibernate.MappingException

yti*_*ala 2 java hibernate jpa

我有一个带有复合 ID 的表,其中一个字段是另一个表的外键。

在此处输入图片说明

我试图用以下类来实现这一点 -

跟踪.java:

public class Tracking {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long trackingId;
    private String accountNumber;
    private TrackingType trackingType;
}
Run Code Online (Sandbox Code Playgroud)

跟踪用例详细信息.java

public class UseCaseStatus implements Serializable {

    private static final long serialVersionUID = -7058248210575975131L;

    @EmbeddedId
    private ID id;
    private String status;
    private String resourceId;
}
Run Code Online (Sandbox Code Playgroud)

身份证.java

public class UseCaseStatusId implements Serializable {

    private static final long serialVersionUID = -7037374226692973832L;

    @JoinColumn(name = "trackingId", updatable = false, nullable = false)
    private Tracking tracking;
    private TrackingUseCase trackingUseCase;
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

org.hibernate.MappingException: Could not determine type for: Tracking, at table: TrackingUseCaseDetails, for columns: [org.hibernate.mapping.Column(tracking)]
Run Code Online (Sandbox Code Playgroud)

关于如何解决错误/改进代码的任何建议?

Ala*_*Hay 5

尝试这个:

@Entity
public class UseCaseStatus implements Serializable {

    @EmbeddedId
    private UseCaseStatusId id;

    @MapsId("tracking")
    @ManyToOne
    @JoinColumn(name = "trackingId", updatable = false, nullable = false)
    private Tracking tracking;

    private String resourceId;
}
Run Code Online (Sandbox Code Playgroud)


@Embeddable
public class UseCaseStatusId implements Serializable {

    //@JoinColumn(name = "trackingId", updatable = false, nullable = false) <- prob not required
    private long tracking;

    @Column(name = "status")
    private String status;

    //implement equals() and hashcode() : https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Embedded_Id
}
Run Code Online (Sandbox Code Playgroud)