首页 > 解决方案 > $expand 在我的 JPA/Olingo 2.0.11 OData 服务中不起作用

问题描述

如果在使用此库版本时扩展系统查询选项适用于你们中的任何人,那将非常有趣。

库和框架组合:Java OData 2 JPA 库 2.0.11 + JPA Hibernate + MySQL

我正在尝试在 OData 查询中使用系统查询选项“expand”(例如 /books?$expand=PublisherDetails)。在 UriParserImpl#handleSystemQueryOptionExpand - L#796 发生 NPE,导致在 L#792 获取的属性的 edmType 为空

如果我想使用递归查询(例如书籍('id')/PublisherDetails)从另一个表中查询数据,我会以不同的方式遇到同样的问题。UriParserImpl#handleNavigationProperties - L#299

库中的 UriParserImpl java 类:https ://github.com/apache/olingo-odata2/blob/master/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/ UriParserImpl.java


持久性实体:

@Entity(name = "book")
public class Book implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(length = 100)
    protected String bookID;
    .
    .
    .
    @ManyToOne(cascade = { CascadeType.REFRESH })
    private Publisher publisher;

    public String getBookID() {
        return bookID;
    }

    public void setBookID(final String bookID) {
        this.bookID= bookID;
    }

    public Publisher getPublisher() {
        return publisher;
    }

    public void setPublisher(final Publisher publisher) {
        this.publisher = publisher;
    }
    .
    .
    .
}

出版商

@Entity(name = "publisher")
public class Publisher implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(length = 100)
    private String id;
    .
    .
    .
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "publisher")
    private List<Book> books;

    public String getId() {
        return id;
    }

    public void setId(final String id) {
        this.id = id;
    }
    .
    .
    .
}

通过 $metadata 获取时,我的导航属性和关联看起来不错。

导航属性:

<NavigationProperty Name="PublisherDetails" Relationship="persistence-unit-name.book_Publisher_Many_ZeroToOne0" FromRole="book" ToRole="Publisher"/>

协会:

 <Association Name="book_Publisher_Many_ZeroToOne0">
        <End Type="persistence-unit-name.book" Multiplicity="*" Role="book"/>
        <End Type="persistence-unit-name.Publisher" Multiplicity="0..1" Role="Publisher"/>

实体容器:

<EntityContainer Name="persistence-unit-nameContainer" m:IsDefaultEntityContainer="true">
        <EntitySet Name="books" EntityType="persistence-unit-name.book"/>
        <EntitySet Name="publishers" EntityType="persistence-unit-name.publisher"/></EntityContainer>

而且......我的EntitySets中没有外键属性是否正常?

非常感谢有关我可能做错的提示。

标签: javajpaodataexpand

解决方案


推荐阅读