Java OneToMany关系上的Spring数据rest NullPointerException

Java OneToMany关系上的Spring数据rest NullPointerException,java,spring,spring-data,spring-data-jpa,spring-data-rest,Java,Spring,Spring Data,Spring Data Jpa,Spring Data Rest,我正在用SpringDataREST开发一个应用程序。在我拥有的每个OneToMany关系中,当我尝试使用一侧的链接访问集合的元素时,我会得到一个NullPointerException 我已经在spring数据rest Jira上报告了这一点,但它仍然没有解决。我想知道的是,是否有人拥有一个在spring数据rest上正常工作的OneToMany关系,以及在工作代码和我的代码上建立关系的方式之间的差异 下面是java类: package rest.model; // Generated 04

我正在用SpringDataREST开发一个应用程序。在我拥有的每个OneToMany关系中,当我尝试使用一侧的链接访问集合的元素时,我会得到一个
NullPointerException

我已经在spring数据rest Jira上报告了这一点,但它仍然没有解决。我想知道的是,是否有人拥有一个在spring数据rest上正常工作的OneToMany关系,以及在工作代码和我的代码上建立关系的方式之间的差异

下面是java类:

package rest.model;

// Generated 04-dic-2013 16:39:39 by Hibernate Tools 3.4.0.CR1

import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * Author generated by hbm2java
 */
@Entity
@Table(name = "AUTHOR", schema = "MPD_LD")
public class Author implements java.io.Serializable {

    private BigDecimal id;
    private String name;
    private Set<Book> books = new HashSet<Book>(0);

    public Author() {
    }

    public Author(BigDecimal id) {
        this.id = id;
    }

    public Author(BigDecimal id, String name, Set<Book> books) {
        this.id = id;
        this.name = name;
        this.books = books;
    }

    @Id
    @Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
    public BigDecimal getId() {
        return this.id;
    }

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

    @Column(name = "NAME", length = 20)
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "author")
    public Set<Book> getBooks() {
        return this.books;
    }

    public void setBooks(Set<Book> books) {
        this.books = books;
    }

}


package rest.model;

// Generated 04-dic-2013 16:39:39 by Hibernate Tools 3.4.0.CR1

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 * Book generated by hbm2java
 */
@Entity
@Table(name = "BOOK", schema = "MPD_LD")
public class Book implements java.io.Serializable {

    private String isbn;
    private Author author;
    private String title;

    public Book() {
    }

    public Book(String isbn) {
        this.isbn = isbn;
    }

    public Book(String isbn, Author author, String title) {
        this.isbn = isbn;
        this.author = author;
        this.title = title;
    }

    @Id
    @Column(name = "ISBN", unique = true, nullable = false, length = 20)
    public String getIsbn() {
        return this.isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ID")
    public Author getAuthor() {
        return this.author;
    }

    public void setAuthor(Author author) {
        this.author = author;
    }

    @Column(name = "TITLE", length = 20)
    public String getTitle() {
        return this.title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

}

我认为问题在于TableBook和table AUTHOR之间关系的FK。我的意思是,您在@JoinColumn中使用列ID(即Author的主键)来创建实体Book和实体Author之间的多对一关系,而您应该使用表Book的FK和Author

另一方面,我从未像您那样使用过JPA注释。我通常会在属性上添加如下内容:

 @Entity
    @Table(name=”AUTHOR”, schema=”MPD_LD”)
    Public class Author implements java.io.Serializable {
        …
        @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY mappedBy=”author”)
        Private Set<Book> books = new HashSet<Book>(0);
        …
    }




 @Entity
    @Table(name=”BOOK”, schema=”MPD_LD”)
    Public class Author implements java.io.Serializable {
        …
        @ManyToOne(fetch=FetchType.LAZY)
        @JoinColumn(name=”<FK of AUTHOR>”
        Author author;
        …
    }
@实体
@表(name=“AUTHOR”,schema=“MPD\u LD”)
公共类作者实现java.io.Serializable{
…
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY mappedBy=“author”)
私有集书籍=新哈希集(0);
…
}
@实体
@表(name=“BOOK”,schema=“MPD\u LD”)
公共类作者实现java.io.Serializable{
…
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“”
作者;
…
}

您是否尝试过向作者添加一本新书?它是否按您的方式工作?

映射(以及整个类)是由Hibernate工具构建的。据我测试,它们对所有方面都正常工作,但对spring data rest除外(只有当您尝试通过链接访问多方集合时,它们才会失败)。您的映射可以与spring data rest一起使用吗?是的,它们工作得很好。您检查过FK的问题吗?字段ID是table BOOK的FK吗?是的,它是FK。我看到您的代码和我的代码之间的区别是,您在注释属性,我在注释方法。我已经尝试过注释属性,但错误仍然存在你可以发布一个代码示例,它可以在一对一的关系中正确地使用spring数据rest吗?
 @Entity
    @Table(name=”AUTHOR”, schema=”MPD_LD”)
    Public class Author implements java.io.Serializable {
        …
        @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY mappedBy=”author”)
        Private Set<Book> books = new HashSet<Book>(0);
        …
    }




 @Entity
    @Table(name=”BOOK”, schema=”MPD_LD”)
    Public class Author implements java.io.Serializable {
        …
        @ManyToOne(fetch=FetchType.LAZY)
        @JoinColumn(name=”<FK of AUTHOR>”
        Author author;
        …
    }