考虑这个类:
@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;
/* ... */
}