2

リレーションがある場合、MongoDB で EclipseLink (2.4.1) が期待どおりに動作するようにしようとしています。しかし ...

私はエンティティに持っています:

@Entity
@NoSql(dataType="account", dataFormat=DataFormatType.MAPPED) // dataType -> collectionName, MAPPED -> because object are transformed into a MAP in MongoDB
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class Account extends JPAMongoBaseEntity {
    @Id
    @Field(name="_id")
    @GeneratedValue
    private String id;

    @Override
    public String getId() { return id;};
    public void setId(String id) { this.id = id;};

    // Must be unique (id fonc)
    @NotNull
    @Size(min = 1, max = 256)
    @Email
    private String email;
...

と :

@Entity
@NoSql(dataType="invoice", dataFormat=DataFormatType.MAPPED) // dataType -> collectionName, MAPPED -> because object are transformed into a MAP in MongoDB
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "label"))
public class Invoice extends JPAMongoBaseEntity {
    @Id
    @Field(name="_id")
    @GeneratedValue
    private String id;

... // Relations
    @ManyToOne
    private Account account;

account.id = パラメータを持つすべての請求書を取得しようとしています。私はこのリクエストを行います:

TypedQuery<Invoice> q = em.createQuery("Select i from Invoice i join i.account a where a.id=:accountId", Invoice.class);
q.setParameter("accountId", accountId);
List<Invoice> res = q.getResultList();

結果は常に同じです。

Internal Exception: java.lang.ClassCastException: org.eclipse.persistence.eis.mappings.EISOneToOneMapping cannot be cast to org.eclipse.persistence.mappings.OneToOneMapping
Query: ReadAllQuery(referenceClass=Invoice jpql="Select i from Invoice i join i.account a where a.id=:accountId")

私は多くのこと(@JoinField、@OneToOne、...)を試しましたが、常にその例外に遭遇します。

どんな助けでも大歓迎です。

4

1 に答える 1

2

http://wiki.eclipse.org/EclipseLink/Examples/JPA/NoSQL#Step_6_:_によると、 結合のクエリはサポートされていません。

読み取り専用の基本マッピングを使用して外部キーをマッピングし、クエリで直接アクセスしてみてください。または、ここで説明されているように、fk フィールドのクエリ キーを追加します http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Query_Keys

敬具、クリス

于 2013-02-15T15:33:09.903 に答える