考虑这个类:

@Entity
class Bar {
    @Id
    private long id;
    private FooId fooId;
    /* ... */
}

其中Foo基本上只是:
class FooId {
    private String id;
    /* ... */
}

我(当然)得到的错误是“基本属性只能是以下类型:…”。
有没有办法告诉JPA(或EclipseLink)将fooId中的myBar字段视为字符串?
我之所以使用某种“包装器”类型而不是纯字符串,是因为我想在我的api中加强一点类型安全性。
例如,getAllFooWithBaz(FooId fooId, BazId bazId)而不是getAllFooWithBaz(String fooId, String bazId)
或者有更好的方法来实现这个目标吗?

最佳答案

这是一个共同的要求。试试这个:

@Entity
class Bar {
    @EmbeddedId
    private FooId fooId;
    /* ... */
}

以及:
@Embeddable
class FooId {
    private String id;
    /* ... */
}

或者(底层数据库架构和FooId保持不变):
@Entity
@IdClass(FooId.class)
class Bar {
    @Id
    private String fooId;
    /* ... */
}

09-27 14:47