Как сказать JPA использовать поле простого класса в качестве значения постоянства? - PullRequest
1 голос
/ 01 сентября 2011

Рассмотрим этот класс:

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

Где Foo в основном просто:

class FooId {
    private String id;
    /* ... */
}

Я (конечно) получаю ошибку, что «Базовые атрибуты могут быть только следующих типов: ...».

Есть ли способ указать JPA (или EclipseLink) обрабатывать мое поле fooId в Bar как строку?

Причина, по которой я использую некоторый тип-обертку вместо простой строки, заключается в том, что я хочу обеспечить некоторую безопасность типов в своих API.

E. г. getAllFooWithBaz(FooId fooId, BazId bazId) вместо getAllFooWithBaz(String fooId, String bazId).

Или есть лучший способ добиться этого?

1 Ответ

2 голосов
/ 01 сентября 2011

Это общее требование.Попробуйте это:

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

и:

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

или (базовая схема базы данных и FooId остаются неизменными):

@Entity
@IdClass(FooId.class)
class Bar {
    @Id
    private String fooId;
    /* ... */
}
...