Java OneToMany关系上的Spring数据rest NullPointerException
我正在用SpringDataREST开发一个应用程序。在我拥有的每个OneToMany关系中,当我尝试使用一侧的链接访问集合的元素时,我会得到一个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
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;
…
}